5

对不起,如果这个问题对每个人来说都是显而易见的,但我对 COM 很陌生。从我在这里看到的教程http://www.codeguru.com/cpp/com-tech/activex/tutorials/article.php/c5567,似乎每个用 C++ 创建的 COM 类都必须实现自己的 QueryInterface、AddRef 和 Release . 由于这些方法对于任何新类都应该具有基本相同的实现,所以我不明白为什么没有一些抽象类或任何为开发人员实现它的东西。我不明白为什么我应该重新实现这么多人已经一次又一次地实现的相同的东西(除非教程是错误的并且有什么东西)。

谢谢

4

3 回答 3

3

自由贸易协定:

“我相信每个希望了解 COM 背后的基本原理的程序员都必须使用普通 C++ 编写至少一个简单的 COM 对象,即无需借助 MFC/ATL 附带的模板和宏。”

回答您的问题:是的,每个 COM 组件都必须实现IUnknown,这是构建 COM 的基础。但是,至于创建 COM 对象的“标准管道”,这就是ATL 项目向导的用途。

于 2011-06-28T13:45:59.287 回答
1

如果您不想使用 ATL 或其他帮助程序库,您可以使用QISearch帮助程序函数为您处理 QueryInterface。AddRef 和 Release 可以在您自己的基类中实现。

COM 也需要与普通 C 一起工作,因此 windows sdk 并没有真正超出类及其方法的定义。

于 2011-06-28T13:52:50.793 回答
1

是的,每个 COM 类都必须实现IUnknown,因为每个 COM 类都继承自IUnknown——这是基本的 COM 技术原则之一。这通常是通过使用 ATL 来完成的——它有模板和宏可以很容易地做到这一点,即使你不想使用 ATL,你也可以很容易地为大多数琐碎的情况(比如实现一个接口)编写一个模板并重用它。

于 2011-06-28T13:55:58.210 回答