如何返回 VT = VT_RECORD 的 [out] 变体而不在 ole32.dll 中造成内存泄漏?
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;
在变体中封装结构:
我正在使用 CoTaskMemAlloc 为结构分配内存,并将其封装在 Variant 中,如下所示:
vV->vt = VT_RECORD;
vV->pvRecord = pStruct; //Pointer of sturct
vV->pRecInfo = pRI; //RecordInfo Interface
感谢
Picaro De Vosio
Purify is pointing memory leak in ole32.dll while returning a Variant with VT set to VT_RECORD as OUT parameter. I am using User Marshalling by generating proxy/stub dll from IDL.
Can you suggest how to avoid this memory leak?
Struct defined in IDL:
{
BSTR m_sFirst;
BSTR m_sSecond;
VARIANT m_vChildStruct; //This member encapsulate a sub structure
SAFEARRAY __RPC_FAR * m_saArray;
}CustomINFO;
Encapsulation of struct in variant:
I am allocating the memory for the structs using CoTaskMemAlloc and encapsulating it in Variant as follows:
vV->vt = VT_RECORD;
vV->pvRecord = pStruct; //Pointer of sturct
vV->pRecInfo = pRI; //RecordInfo Interface
Thanks
Picaro De Vosio
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
支持 VT_RECORD 有限制。
尝试检查 http://vcfaq.mvps.org/com/4.htm ,可能有帮助。
如果您更详细地描述您的案例(相关的 IDL 部分、编译器版本和描述 Purify 怀疑泄漏的客户端/服务器通信的代码),它也可能会更有帮助。
there are limitations in support of VT_RECORD.
Try checking with http://vcfaq.mvps.org/com/4.htm, might help.
It might also be more helpful if you describe your case in more details (related IDL parts, commpiler version and code describing client/server communication which Purify suspects as leaking )