我需要使用COM(组件对象模块)吗
Do I need to use COM (component object module)
几天前,我开始阅读COM。然后我的一名团队成员告诉我,这是一项旧技术,现在已经有几天没有人使用它了。
我的问题是:
1) 如果这是一项旧技术,那么有什么替代方案呢。
2) 为什么我不需要使用COM。即COM的缺点是什么。
COM是一种"老技术",就像C++一样。它老了并不意味着它过时了。微软不断使用它(Windows 8大量使用它)的原因是因为它是一种相对低开销的基于对象的技术。在使用COM之前,没有大的运行时需要初始化(尽管组件可以在需要时初始化运行时,例如.NET CCW)。
接口/实现边界是严格分开的,因此它有助于以面向对象的方式公开Windows功能(以及Windows Shell基于COM的DirectX)。
COM对什么是COM以及什么是建立在COM之上存在着普遍的误解。ActiveX、DCOM、OLE、COM+等都建立在COM上,但没有定义什么是COM。COM本身作为核心技术一直保持相对简单。
我说相对来说是因为COM并不完美。单元模型可能会导致重大问题,例如跨单元编组需要应用程序泵送消息队列。早在90年代末,人们就开始疯狂地使用COM组件,这给应用程序带来了不必要的复杂性。然而,这是一项经过充分测试的技术,如果使用得当,它可以很好地工作,尤其是在为第三方公开或消费功能时。如果你想真正了解Windows API,你需要知道COM是如何工作的。
1)如果这是一项旧技术,那么有什么替代方案。
COM确实很旧。微软的"替代方案"过去是。NET,但这意味着您需要配合CLR(因此本机C++无法配合,您需要使用C++/CLI)。最新的替代方案现在被称为WinRT(Windows运行时)。WinRT目前仅适用于Windows 8和Windows Server 2012。在最底层,WinRT实际上是COM,但微软已经重新思考了它的许多陷阱。与平台/语言无关的替代方案包括Google协议缓冲区、Apache Thrift和SOAP。
2)为什么我不需要使用COM。即COM的缺点是什么。
COM的主要用途是进程间通信(IPC)。例如,如果您有两个用两种编程语言编写的应用程序,并且希望它们进行通信,那么COM是一个(特定于windows的)解决方案。COM在90年代被广泛用于C++和VB6应用程序之间的通信。如果你不需要IPC,那么你对COM的前景很低。我们在今天的工作中最常用的COM来跨本机C++应用程序和托管应用程序进行IPC。NET应用程序。
最新的大型微软"技术",用于编写windows 8 metro应用程序的WinRT运行时(无论它们现在被称为什么…)完全依赖于COM,因此它肯定不会过时。
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- CMake-按正确顺序将项目与C运行时对象文件链接
- 空基优化子对象的地址
- 将对象数组的引用传递给函数
- 从 WinRT C++组件访问 COM 对象
- 组件对象模型 (COM):IMalloc::Alloc 在哪里分配内存?
- 如何确保将对象通过许多层的组件时,不会制作副本
- 如何在Windows中注册COM(组件对象模型)?(用于图标覆盖处理程序)
- 我需要使用COM(组件对象模块)吗
- 如何在 Visual C++ 2008 中使用组件对象模型
- QML:如何将动态创建的组件与自定义的内部对象一起使用
- QtQuick:QQmlApplicationEngine无法加载组件qrc:/main.qml:23附加对象分配无效
- 当对象表示硬件组件时,我应该使用指向对象的指针吗
- 作为不同用户运行的两个exe如何使用COM(组件对象模型)进行通信
- 组件对象模型查询接口
- 基于组件的游戏对象的阵列和地图之间的优点和缺点
- 我可以在不检查是否存储该对象的情况下删除联合组件吗?
- 如何从c++ COM组件返回和使用自定义结构对象到c#应用程序
- 一个组件的整体实现是否可以分为两个对象