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

关于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 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog