u010064736 2016-01-20 02:18 采纳率: 100%
浏览 2721
已采纳

关于C++用SAFEARRAY传递字符串数组的问题

碰到个问题,需要用VARIANT变量传递字符串数组,想到使用SAFEARRAY,就写了如下代码,结果运行出现堆内存错误,请问该如何改正,多谢赐教
int _tmain(int argc, _TCHAR* argv[])
{
SAFEARRAY psa;
SAFEARRAYBOUND rgsabound[1];
rgsabound[0].cElements=2;
rgsabound[0].lLbound=0;
psa = SafeArrayCreate(VT_BSTR,1,rgsabound);
_bstr_t *buf;
SafeArrayAccessData(psa, (void *
)&buf);
buf[0]="你好";
buf[1]="大家好";
SafeArrayUnaccessData(psa);
_variant_t var;
var.vt = VT_ARRAY|VT_BSTR;
var.parray=psa;
_bstr_t * buf1;
SafeArrayAccessData(var.parray, (void **)&buf1);
printf("%s\n",(LPSTR)(buf1[0]));
printf("%s\n",(LPSTR)(buf1[1]));
SafeArrayUnaccessData(psa);
getchar();
return 0;
}
补充:改成如下代码,则显示不出结果
int _tmain(int argc, _TCHAR* argv[])
{
SAFEARRAY psa;
SAFEARRAYBOUND rgsabound[1];
rgsabound[0].cElements=2;
rgsabound[0].lLbound=0;
psa = SafeArrayCreate(VT_BSTR,1,rgsabound);
_bstr_t buf[2];
_bstr_t
pbuf = &buf[0];
SafeArrayAccessData(psa, (void **)&pbuf);
buf[0]="你好";
buf[1]="大家好";
SafeArrayUnaccessData(psa);
_variant_t var;
var.vt = VT_ARRAY|VT_BSTR;
var.parray=psa;
_bstr_t buf1[2];
_bstr_t* pbuf1 = &buf1[0];
SafeArrayAccessData(var.parray, (void **)&pbuf1);
printf("%s\n",(LPSTR)(buf1[0]));
printf("%s\n",(LPSTR)(buf1[1]));
SafeArrayUnaccessData(psa);
getchar();
return 0;
}

自己摆弄了半天,总算改对了,看样子不能用_variant_t,改成BSTR就行。

  • 写回答

2条回答 默认 最新

  • 91program 博客专家认证 2016-01-20 02:35
    关注

    _bstr_t* buf1 = new _bstr_t[2]; 这一句,buf1 不用初始化吧,也就是说不用 new 空间。请参考:
    关于SafeArray的使用说明(转)

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 如果要做一个老年人平板有哪些需求
  • ¥15 k8s生产配置推荐配置及部署方案
  • ¥15 matlab提取运动物体的坐标
  • ¥15 人大金仓下载,有人知道怎么解决吗
  • ¥15 一个小问题,本人刚入门,哪位可以help
  • ¥15 python安卓开发
  • ¥15 使用R语言GD包一直不出结果
  • ¥15 计算机微处理器与接口技术相关问题,求解答图片的这个问题,有多少个端口,端口地址和解答问题的方法和思路,不要AI作答
  • ¥15 如何根据一个截图编写对应的HTML代码
  • ¥15 stm32标准库的PID角度环