如何在没有在ole32.dll中创建内存泄漏的情况下返回VT = VT_RECORD的[out]变量?

时间:2010-06-13 08:20:02

标签: visual-c++ com marshalling atl unmarshalling

Purify指向ole32.dll中的内存泄漏,同时返回 Variant ,VT设置为 VT_RECORD OUT参数。我通过从IDL生成代理/存根dll来使用用户编组。 你能建议如何避免这种内存泄漏吗?

在IDL中定义的结构:

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

变体中struct的封装:

我使用CoTaskMemAlloc为结构分配内存并将其封装在Variant中,如下所示:

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

由于

Picaro De Vosio

1 个答案:

答案 0 :(得分:1)

支持VT_RECORD存在限制。 尝试使用http://vcfaq.mvps.org/com/4.htm查看,可能会有帮助。

如果您更详细地描述您的案例(相关的IDL部分,commpiler版本和描述客户端/服务器通信的代码,其中Purify怀疑泄漏),这可能会更有帮助。