#import指令引用计数问题

发布于 2024-11-08 23:11:53 字数 969 浏览 2 评论 0原文

我一直在研究从 MFC C++ 应用程序 (VS 2008) 调用 COM 组件的不同方法,并且在使用 Microsoft Office 自动化作为示例时,我遇到了 MS 知识库文章 #196776(最后修改时间为 2008 年 3 月 13 日),其中指出以下内容:

您可以使用三种基本方法 自动化:MFC、#import 和 C/C++:

  • 通过 MFC,使用 Visual C++ ClassWizard 从 Microsoft Office 类型库生成“包装类”。这些类以及其他 MFC 类(例如 COleVariant、COleSafeArray、COleException)简化了自动化任务。与其他方法相比,通常推荐使用此方法,并且大多数 Microsoft 知识库示例都使用 MFC。
  • #import 是 Visual C++ 5.0 中提供的一个新指令,它从指定的类型库创建 VC++“智能指针”。它非常强大,但通常不推荐,因为与 Microsoft Office 应用程序一起使用时通常会出现引用计数问题
  • C/C++ 自动化要困难得多,但有时有必要避免 MFC 的开销或 #import 的问题。基本上,您使用 CoCreateInstance() 等 API 以及 IDispatch 和 IUnknown 等 COM 接口。

我一直更喜欢使用 #import 而不是生成额外的“包装类”,因为更新 COM 服务器时添加新方法更容易(并且我不需要重新运行 ClassWizard),但是现在我担心我'我们一直在采取错误的方法,引用计数的这个问题是特定于 Microsoft Office 还是所有 COM 自动化组件?如果它仅特定于 Office,我如何避免在我创建的 COM 服务器中引入类似的问题?

I've been looking into the different ways to call COM components from my MFC C++ application (VS 2008) and while using Microsoft Office automation as an example, I came across MS KB article #196776 (last modified March 13, 2008) which states the following:

There are three basic ways you can use
Automation: MFC, #import, and C/C++:

  • With MFC, use the Visual C++ ClassWizard to generate "wrapper classes" from the Microsoft Office type libraries. These classes, as well as other MFC classes, such as COleVariant, COleSafeArray, COleException, simplify the tasks of Automation. This method is usually recommended over the others, and most of the Microsoft Knowledge Base examples use MFC.
  • #import, a new directive that became available with Visual C++ 5.0, creates VC++ "smart pointers" from a specified type library. It is very powerful, but often not recommended because of reference-counting problems that typically occur when used with the Microsoft Office applications.
  • C/C++ Automation is much more difficult, but sometimes necessary to avoid overhead with MFC, or problems with #import. Basically, you work with such APIs as CoCreateInstance(), and COM interfaces such as IDispatch and IUnknown.

I've always preferred using #import over generating additional "wrapper classes" since it's easier to add new methods when the COM server has been updated (and I don't need to rerun the ClassWizard), however now I'm concerned I've been taking the wrong approach, is this problem with reference counting specific to Microsoft Office or to all COM automation components? If it's only specific to Office how do I avoid introducing similar problems into the COM servers I create?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

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

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文