Я немного озадачен отсутствием документации по этой проблеме, поэтому я могу быть совершенно не в курсе:
Когда я выделяю память, чтобы вернуть объект через уникальный указатель, значение которого у меня естьизменено, какой распределитель я должен использовать?
В документации сказано, что я могу предоставить MIDL_user_allocate () и MIDL_user_free (), и заглушка будет использовать их - однако это не имеет смысла в CLSCTX_INPROC_SERVER, поскольку вызывающий объектнужно использовать (и, следовательно, разрешить) мой распределитель.
Итак, как мне выделить память здесь, чтобы код заглушки мог правильно освободить список, если DLL загружена в 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;
}