C++ IUnknown接口必须由每个新的COM类重新实现吗?

C++ IUnknown接口必须由每个新的COM类重新实现吗?,c++,com,iunknown,C++,Com,Iunknown,很抱歉,如果这个问题对每个人来说都很明显,但我对COM非常陌生。从我在这里看到的教程中,似乎每个C++中创建的COM类都必须实现它自己的Que界面、AddiRf和Relp。由于这些方法对于任何新类都应该有基本相同的实现,我不明白为什么没有一些抽象类或其他东西为开发人员实现它。我不明白为什么我应该重新实现很多人已经一次又一次实现过的东西(除非教程是错误的,并且有什么东西) 感谢FTA: “我相信每个想了解COM背后的基本原理的程序员都必须使用普通C++编写至少一个简单的COM对象,即不需要伴随MF

很抱歉,如果这个问题对每个人来说都很明显,但我对COM非常陌生。从我在这里看到的教程中,似乎每个C++中创建的COM类都必须实现它自己的Que界面、AddiRf和Relp。由于这些方法对于任何新类都应该有基本相同的实现,我不明白为什么没有一些抽象类或其他东西为开发人员实现它。我不明白为什么我应该重新实现很多人已经一次又一次实现过的东西(除非教程是错误的,并且有什么东西)

感谢FTA:

<>“我相信每个想了解COM背后的基本原理的程序员都必须使用普通C++编写至少一个简单的COM对象,即不需要伴随MFC/ATL的模板和宏。”

回答你的问题:是的,每个COM组件都必须实现,它是建立在基础COM上的。但是,对于用于创建COM对象的“标准羽状化”,这就是它的用途。

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


COM还需要使用普通C,因此windows sdk不会超出类及其方法的定义。

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

此向导毫无用处。当我尝试它时,它告诉我它将向我的项目添加ATL支持,然后我得到一个致命错误RC1015:无法打开包含文件“我的资源。我的项目编译得很好,MyResource.h文件存在,它是include路径。但不管怎样,你回答了这个问题,我忘了我在教程开始时读过这篇文章,很抱歉这个愚蠢的问题。@Carl这不是一个愚蠢的问题,地球上的每个人都有“duh”时刻(我发现使用COM时,这些时刻呈指数级增长)。祝你的项目好运。@Carl:你可以通过编辑资源编译器设置来解决RC1015问题-它们在配置->资源->常规中,你必须更改包含路径。@sharptooth:是的,我已经这样做了,否则我的项目将无法编译。但是当我运行向导时,它会给我RC1015,然后我检查项目设置,我的资源包含路径被删除。所以我重新编写了它们,但每次运行向导时,它们都会被删除,不知道为什么-\u-。。。