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

关于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的使用说明(转)

    打赏 评论
  • devmiao 2016-01-20 04:15
    打赏 评论

相关推荐 更多相似问题