很抱歉,如果这个问题对每个人来说都很明显,但我对COM很新。从我在这里看到的教程http://www.codeguru.com/cpp/com-tech/activex/tutorials/article.php/c5567来看,似乎每个用C ++创建的COM类都必须实现自己的QueryInterface,AddRef和Release。由于这些方法应该对任何新类具有基本相同的实现,我不明白为什么没有一些抽象类或为开发人员实现它的任何东西。我不明白为什么我应该重新实现许多人已经一次又一次地实现的相同的事情(除非教程是错误的并且有一些东西)。
由于
答案 0 :(得分:3)
FTA:
“我相信每个希望理解COM背后的基本原理的程序员必须使用普通的C ++编写至少一个简单的COM对象,即不借助MFC / ATL附带的模板和宏。”
回答你的问题:是的,每个COM组件都必须实现IUnknown,这是构建COM的基础。但是,对于创建COM对象的“标准pluming”,这是ATL Project Wizard的用途。
答案 1 :(得分:1)
如果您不想使用ATL或其他帮助程序库,可以使用为您处理QueryInterface的QISearch帮助程序函数。 AddRef和Release可以在你自己的基类中实现。
COM也需要使用普通的C,所以windows sdk并没有真正超越类及其方法的定义。
答案 2 :(得分:1)
是的,每个COM类都必须实现IUnknown
,因为每个COM类都继承自IUnknown
- 这是COM技术的基本原则之一。这通常是通过使用ATL来完成的 - 它具有模板和宏,可以非常轻松地完成这项工作,即使您不想使用ATL,您也可以非常轻松地为大多数琐碎案例(如实现一个接口)编写模板并重用它。