我对该问题缺少文档感到有些困惑,因此在这里我可能完全偏离了轨道:
当我分配内存以便通过已修改其值的唯一指针返回对象时,应该使用什么分配器?
文档说我可以提供MIDL_user_allocate()
和MIDL_user_free()
,而存根将使用它们-但是在CLSCTX_INPROC_SERVER
中没有意义,因为调用对象将需要使用(并因此解析)我的分配器。
因此,我应该在这里分配内存,以便如果将DL
L加载到SVCHOST
中,存根代码可以正确释放列表,并且如果需要,应用程序仍可以直接使用DLL
。] >
idl:
HRESULT GetItems([out] DWORD *count, [out, size_is(,count)] ITEM **items);
cpp:
HRESULT STDMETHODCALLTYPE impl::GetBuffer(DWORD *count, ITEM **items)
{
*count = 0;
*items = reinterpret_cast<ITEM *>(/* ??? */);
if(!*items)
return E_OUTOFMEMORY;
*count = 5;
/* fill in items */
return S_OK;
}
我对此问题缺少文档感到有些困惑,所以我在这里可能完全偏离了轨道:当我分配内存以通过具有其值的唯一指针返回对象时...]]
来自here:
输出参数必须由被叫人分配;它们由调用者使用标准COM任务内存分配器释放。