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)
被这个问题困扰好几天了,还是没有解决。请各位大虾不吝指教,感激不尽。