0

我在 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

调用 VariantClear 释放结构及其成员的内存是否足够?它还会释放IRecordInfo 接口吗?

或者我必须手动获取封装的结构并自己解除分配每个成员,然后使用 CoTaskMemFree 解除分配结构。

谢谢

皮卡罗·德·沃西奥

4

1 回答 1

1

VariantClear将调用IRecordInfo::Clear,它释放结构成员持有的内存,但据说不会释放结构本身(这就是为什么你不能正确返回一个结构的原因 [out] VARIANT)。IRecordInfo 也应该被释放。

(“应该”的意思是“否则,很多现有的代码会被破坏/被破坏”)。

这里有更多信息:http: //vcfaq.mvps.org/com/4.htm

于 2010-04-18T12:43:38.303 回答