如何返回 VT = VT_RECORD 的 [out] 变体而不在 ole32.dll 中造成内存泄漏?

发布于 2024-09-05 06:36:47 字数 678 浏览 10 评论 0原文

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

帅的被狗咬 2024-09-12 06:36:47

支持 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 )

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文