描述:
我用ATL编写了一个COM控件(进程内或进程外),这个控件有一个方法,将一批数据传出来,请问这批数据的内存有谁了分配。我的做法如下
如:HRESULT GetImage([out] VARIANT *vtImage,[out,retval] VARIANT_BOOL *pbSuccess)
{
*pbSuccess=VARIANT_FALSE;
vtImage->vt=VT_UI|VT_ARRAY;
SAFEARRAYBOUND rgsabound[1];
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = Image_Size;
vtImage->parray=::SafeArrayCreate(VT_UI1,1,rgsabound);
PBYTE pBuffer;
::SafeArrayAccessData(pImageFileBuffer->parray,(void**)&pBuffer);
memcpy(pBuffer,pImageBuffer,Image_Size);
::SafeArrayUnaccessData(pImageFileBuffer->parray);
*pbSuccess=VARIANT_TRUE;
}
我这样写有几个问题,
1:vtImage:到底应该[in],[out],还是[in,out];
2: 我这样做要只要客户用一次,我就要分配内存一次,客户释放内存一次,这样效率很低。我想可不可以客户分配一个大内存,然后调用我的方法,我在方法里使用客户分配的内存,最后有客户释放内存。这样做有一个好处,就是用户反复调用我的方法时,不必反复分配,反复释放。
希望大家讨论