码迷,mamicode.com
首页 > 其他好文 > 详细

com

时间:2014-05-22 15:19:10      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:style   blog   class   c   code   java   

COM

Component Object Model (组件对象模型)

在二进制级别上进行集成和重用的软件单元

 

在同一软件中的组件必须使用相同的接口标准,组件之间才能相互通信

 

访问COM对象的唯一途径是通过COM接口

接口是一组调用函数,也是客户程序和组件之间的协议

核心接口--IUnknown

 

COM 是C/S模型

首先创建一个COM对象,然后通过COM接口调用它所提供的服务,服务结束后记得释放资源

 

多个COM对象可以连接起来组成应用程序或组件系统,并且组件可以在运行时、不重新编译链接的情况下被替换掉

Micrpsoft也大量运用了COM来开发他们的应用程序

 

 

一个用C++实现COM的简单但完整的例子:

bubuko.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 }
bubuko.com,布布扣

 

 客户和组件之间应该只通过接口来通信,这样的话,就算组件发生改变,整个程序也无序重新编译。接口是通过纯虚基类来实现的。

在COM中对一个组件的访问只能通过函数,而不能通过变量。

 

client对component知道的越少,那么component的改变对client影响就越小

com,布布扣,bubuko.com

com

标签:style   blog   class   c   code   java   

原文地址:http://www.cnblogs.com/aoun/p/3744070.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!