vc和vb之间传递的字符串数组如何释放?

猪翼天翔 2008-03-25 04:24:32
用VC写了个COM组件供VB程序调用,先用了安全数组:
STDMETHODIMP Test(LONG total, VARIANT * test)
{
SAFEARRAYBOUND dimension[1];
dimension[0].lLbound = 0;
dimension[0].cElements = total;

SAFEARRAY *pT = SafeArrayCreate(VT_BSTR,1,dimension);
for(LONG i=0;i<total;++i)
{
BSTR temp= A2BSTR("测试");
SafeArrayPutElement(pT, &i, temp);
::SysFreeString(temp);
}

agentId->vt = VT_BSTR|VT_ARRAY;
SafeVarrayCopy(pT, test->parray);
SafeArrayDestroy(pT);
}
数据能够返回,但是VB程序的内存不停往上涨。

然后换成另一种方法:
STDMETHODIMP Test(LONG total, VARIANT * test)
{
BSTR HUGEP *pT;
SafeArrayAccessData(test->parray, (void HUGEP* FAR*)&pT);

for (LONG i=0;i<total;++i)
{
BSTR temp= A2BSTR("测试");
pT[i] = temp;
//::SysFreeString(temp);
}

SafeArrayUnaccessData(test->parray);
return S_OK;
}
数据能够返回,但是VB程序的内存还是不停涨;而且用了::SysFreeString(已注释掉)的话返回的字符串就全是乱码,内存同样还是涨。

VB中调用代码大概如下:
Dim t As Variant
Redim t(10) As String
Test (t)

被这个问题困扰好几天了,还是没有解决。请各位大虾不吝指教,感激不尽。
...全文
194 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
猪翼天翔 2008-03-27
  • 打赏
  • 举报
回复
哦,已经用_com_util::ConvertStringToBSTR搞定了,多谢各位。
猪翼天翔 2008-03-26
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jameshooo 的回复:]
千万别用BSTR temp= A2BSTR("测试"); 这种语句,一定要使用
BSTR temp= SysAllocString(OLESTR("测试")); 但是组件中是不能SysFreeString的(因为是传出参数,VB里会负责释放资源的)。
[/Quote]
恩,试过了,内存果然没涨了。不过有点不明白,为什么A2BSTR宏里面也是用SysAllocStringLen分配,到了VB里面就没释放呢?
另外实际程序里面传递的是变量,比如char msg[] = "测试",怎么把变量传递给 SysAllocString呢?谢谢
jameshooo 2008-03-25
  • 打赏
  • 举报
回复
千万别用BSTR temp= A2BSTR("测试"); 这种语句,一定要使用
BSTR temp= SysAllocString(OLESTR("测试")); 但是组件中是不能SysFreeString的(因为是传出参数,VB里会负责释放资源的)。
用户 昵称 2008-03-25
  • 打赏
  • 举报
回复
vc里面用unsigned char * str做参数

vb里面声明 byval str as long

vb里面调用

dim b( 0 to 100 ) as byte

将b的第一个元素传进去
Test b(0)

之后用

strconv( b, vbunicode )转成string.

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧