每个新的COM类都必须重新实现IUnknown接口
Must the IUnknown interface be re-implemented by every new COM class?
如果这个问题对每个人来说都很明显,我很抱歉,但我对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,你也可以非常容易地为大多数琐碎的情况(比如实现一个接口)编写模板并重用它。
相关文章:
- 有没有比在库中添加一个并非由所有派生类实现的新虚拟函数更好的设计实践
- C++ 如何使用动态计算的新节点实现 A*?
- 实现一个函数,该函数将字符串作为输入并返回一个新字符串,辅音字母不替换为 "!"
- C++ 多重继承:使用基类 A 的实现实现基类 B 的抽象方法
- 为什么这个新的 [ ] 和删除 [ ] 实现会分解为 12 >整数?
- 在不创建新节点的情况下实现带有映射的trie
- 使用 Qt5 的新信号/插槽实现向滑块发出信号
- 如何实现由TPAINTBOX创建的新组件的OnMousedown,OnMouseUp事件
- 如何自己为我自己的shared_ptr实现实现别名构造函数
- 为什么我不能使私人运营商成为新的并使用默认实现?
- 如何向 C++ 中无法访问其实现的类添加新函数
- 在哪里可以找到C 中新运营商的确切实现
- C++新的不同实现
- 如何实现一个创建新对象并返回对它的引用的C++方法
- 如何实现消费者生产者,消费者可以请求新的数据
- 这个UTF-8实现实现是定义的还是定义良好的
- 如何实现C++"新"运算符
- 我可以在不使用新关键字的情况下以某种方式实现这一点吗?C++
- 如何实现一个简单的容器放置新和放置功能
- 您将如何重构这种多态设计,以便在添加新实现时使其更加灵活?