首页 > 代码库 > com
com
COM
Component Object Model (组件对象模型)
在二进制级别上进行集成和重用的软件单元
在同一软件中的组件必须使用相同的接口标准,组件之间才能相互通信
访问COM对象的唯一途径是通过COM接口
接口是一组调用函数,也是客户程序和组件之间的协议
核心接口--IUnknown
COM 是C/S模型
首先创建一个COM对象,然后通过COM接口调用它所提供的服务,服务结束后记得释放资源
多个COM对象可以连接起来组成应用程序或组件系统,并且组件可以在运行时、不重新编译链接的情况下被替换掉
Micrpsoft也大量运用了COM来开发他们的应用程序
一个用C++实现COM的简单但完整的例子:
1 #include "stdafx.h" 2 #include <objbase.h> 3 #include <iostream> 4 5 using std::cout; 6 using std::endl; 7 8 void trace(const char *pMsg) {cout << pMsg << endl;} 9 10 interface IX { // Interface 11 virtual void __stdcall Fx1() = 0; 12 virtual void __stdcall Fx2() = 0; 13 }; 14 15 interface IY { 16 virtual void __stdcall Fy1() = 0; 17 virtual void __stdcall Fy2() = 0; 18 }; 19 20 class CA : public IX, public IY { // Component 21 public: 22 virtual void __stdcall Fx1() {cout << "CA::Fx1" << endl;} 23 virtual void __stdcall Fx2() {cout << "CA::Fx2" << endl;} 24 virtual void __stdcall Fy1() {cout << "CA::Fy1" << endl;} 25 virtual void __stdcall Fy2() {cout << "CA::Fy2" << endl;} 26 }; 27 28 int _tmain(int argc, _TCHAR* argv[]) // Client 29 { 30 trace("Client: Create an instance of the component."); 31 CA * pA = new CA; 32 33 IX * pIX = pA; 34 trace("Client: Use the IX interface."); 35 pIX->Fx1(); 36 pIX->Fx2(); 37 38 IY * pIY = pA; 39 trace("Client: Use the IY interface."); 40 pIY->Fy1(); 41 pIY->Fy2(); 42 43 trace("Client: delete the component"); 44 delete pA; 45 return 0; 46 }
客户和组件之间应该只通过接口来通信,这样的话,就算组件发生改变,整个程序也无序重新编译。接口是通过纯虚基类来实现的。
在COM中对一个组件的访问只能通过函数,而不能通过变量。
client对component知道的越少,那么component的改变对client影响就越小
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。