在上一个blog中说明了如何实现size_is的应用,在这个blog中主要用来说明如果通过[out, size_is]讲COM组件或者server中的数据Output给caller。实例如下:
IDL interface define:
HRESULT TestInterface2([out] long * size, [out, size_is( , *size)] byte ** data);
COM services code:
STDMETHOD (TestInterface2)(/*[out]*/ long *size, /*[out, size_is( , *size)]*/ byte ** data)
{
LPBYTE p = NULL;
*size = 11;
long dSize = *size;
*data = (LPBYTE)CoTaskMemAlloc(dSize * sizeof(unsigned char));
memset(*data, 0, dSize);
memcpy(*dat, "123456789a", 10);
return S_OK;
};
COM Client code:
long lSize = 0;
byte * pData = NULL;
m_pInterface->TestInterface2(&lSize, &pData);
CoTastMemFree(pData);
说明:COM组件内存分配和共享是通过CoTaskMemAlloc函数实现的,并且需要调用CoTastMemFree API函数释放内存。这是COM组件内存共享的唯一途径&