描述:
目的:在客户端传递一个long**指针的指针,在COM组件内分配内存,然后客户端使用并负责释放。
方法:用ATL写的COM组件方法如下
IDL定义:
HRESULT GetList([in]long nSize,[out]long** pResult);
C++代码:
STDMETHODIMP CTestTypes::GetList(long nSize, long **pResult)
{
*pResult = reinterpret_cast<long*>(CoTaskMemAlloc(nSize*sizeof
(long)));
if( *pResult=NULL )
return E_OUTOFMEMORY;
return S_OK;
}
客户端:
long* ptrCOMMemory;
HRESULT hr = ptrTT->GetList(10,&ptrCOMMemory);
if( FAILED(hr) )
{
ErrorMessage(hr);
return -2;
}
for( int k=0; k<10; k++ )
{
*ptrCOMMemory = k; //
cout << *ptrCOMMemory << endl;
ptrCOMMemory++;
}
CoTaskMemFree(ptrCOMMemory);
现在问题处在,在COM内内存分配正确,可返回客户端后,ptrCOMMemory就变成0了?自然随后的赋值操作就错了,可why?
long** pVal声明为[out]不对吗?还是其他什么原因?望指教!