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

关于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 arduino控制ps2手柄一直报错
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥85 maple软件,solve求反函数,出现rootof怎么办?
  • ¥15 求chat4.0解答一道线性规划题,用lingo编程运行,第一问要求写出数学模型和lingo语言编程模型,第二问第三问解答就行,我的ddl要到了谁来求了
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题