Как вернуть вариант [out] с VT = VT_RECORD без создания утечки памяти в ole32.dll? - PullRequest
1 голос
/ 13 июня 2010

Purify указывает на утечку памяти в ole32.dll при возврате варианта с VT, установленным в VT_RECORD как OUT параметр . Я использую User Marshalling путем создания прокси / заглушки DLL из IDL. Можете ли вы предложить, как избежать этой утечки памяти?

Структура, определенная в IDL:

{
BSTR m_sFirst;
BSTR m_sSecond;
VARIANT m_vChildStruct; //This member encapsulate a sub structure 
SAFEARRAY __RPC_FAR * m_saArray;
}CustomINFO;

Инкапсуляция структуры в варианте:

Я выделяю память для структур с помощью CoTaskMemAlloc и инкапсулирую ее в Variant следующим образом:

vV->vt = VT_RECORD;
vV->pvRecord = pStruct; //Pointer of sturct
vV->pRecInfo = pRI; //RecordInfo Interface

Спасибо

Пикаро Де Восио

1 Ответ

1 голос
/ 13 июня 2010

есть ограничения в поддержке VT_RECORD. Попробуйте проверить с помощью http://vcfaq.mvps.org/com/4.htm,.

Также было бы более полезно, если бы вы описали свой случай более подробно (связанные части IDL, версия компилятора и код, описывающий взаимодействие клиент-сервер, которое Purify подозревает как утечку)

...