每个新的COM类都必须重新实现IUnknown接口

Must the IUnknown interface be re-implemented by every new COM class?

本文关键字:新实现 实现 IUnknown 接口 COM      更新时间:2023-10-16

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

感谢

FTA:

"我相信,每一个想要理解COM背后基本原理的程序员,都必须使用纯C++编写至少一个简单的COM对象,即不需要MFC/ATL附带的模板和宏的帮助。"

为了回答您的问题:是的,每个COM组件都必须实现IUnknown,这是COM的基础。然而,至于创建COM对象的"标准填充",这就是ATL项目向导的作用。

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

COM还需要使用纯C,这样windowssdk就不会真正超出类及其方法的定义。

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