gpt4 book ai didi

c++ - 使用 C++ "operator new"而不是 CoCreateinstance 来创建 COM 对象是否安全?

转载 作者:可可西里 更新时间:2023-11-01 15:23:41 25 4
gpt4 key购买 nike

这可能是一个菜鸟 COM 问题,但谷歌搜索提出的问题多于提供答案:

对本地 COM 实例使用“operator new”而不是 CoCreateInstance 是否安全?

我做了什么:

  1. 我实现了 IOperationsProgressDialog 接口(interface) http://msdn.microsoft.com/en-us/library/windows/desktop/bb775368(v=vs.85).aspx通过使用公共(public)继承,从而也实现了 IUnknown 接口(interface)。

  2. 我通过“new RecyclerProgressCallback”创建了一个实例,并将其放入 COM-Ptr 以进行生命周期管理。 “RecyclerProgressCallback”是我派生类的名称。

  3. 我在 IFileOperation::SetProgressDialog 中使用这个实例 http://msdn.microsoft.com/en-us/library/windows/desktop/bb775803(v=vs.85).aspx

总结:我的方法“似乎”可行,但我不相信它,围绕 COM 对象创建的信息太多令人不安,不能仅依赖可观察到的行为。

有没有什么微妙的风险、谬误或其他问题?谢谢!

最佳答案

我什至把它们放在了堆栈上。 Andrey 的回答(现已删除)错误地暗示它是不安全的,因为您绕过了 COM 引用计数。这是错误的推理。 COM 不计算引用;它把责任委托(delegate)给你。在 COM 在其最后一个接口(interface)上调用您的 Release 方法之后,您必须调用 deletefree(),或者您使用的任何语言。重要的词是 after。不是什么时候,因为您没有义务立即这样做。

同样,CoCreateInstance 是一个很长的弯路,因为 COM 是语言中立的,并且不知道是否必须使用 mallocnew 。确实如此,所以只需绕过整个 COM 逻辑即可。

关于c++ - 使用 C++ "operator new"而不是 CoCreateinstance 来创建 COM 对象是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13052793/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com