知识严重贫瘠~

我对COM的理解[转]

上一篇 / 下一篇  2010-07-08 09:29:07 / 个人分类:C++


  COM,组件对象模型,通俗说就是COM就是提供了一种编程的架构。通过COM规范规定了COM组件应该实现的
  一些接口和接口函数,其他程序通过固定的方法使用这些函数,在Windows平台下,所谓的固定方法通过提供
  的各种GUID在注册表中找到COM组件,然后调用指定的DLL或者EXE(通过ROT)调用指定的函数,以获得所需要的
  接口的指针,所谓的接口的指针其实就是指向函数指针数组的指针,通过接口指针调用COM组件提供的服务。
   如果不借助ATL等类库等实现COM组件,其实也很简单,只需要牢记下面几点就可以了:
   1、使用IDL在idl文件中定义接口。因为COM是与语言无关的,所以需要一种各种语言等能懂的语言来定义
   接口。使用MIDL编译编写好的idl文件可以获得一个.h文件,从此文件中就可以看出在idl文件中定义的
   接口被编译成了C++中的纯虚类。从这里也可以得到:
   A、纯虚类的内存结构确实是和COM所要求的内存结构相同,所以使用纯虚类来定义COM接口;
   B、其实可以不需要idl文件直接使用C++语言定义COM接口,那又为什么需要呢?简单言之,就是为了
   实现COM的语言无关性。使用C++定义的接口不能被其他语言所使用,当使用IDL语言编写的idl文件
   被MIDL编译之后可以生成一个.tlb的类型库文件,此文件可以被其他语言使用。
   2、接口的实现其实很简单,就是在继承了所定义的接口的派生类当中实现就可以了。一个派生类可以继承
   自多个接口。为了实现一些功能可以继承自一些标准的COM接口,比如:IDispatch、IMarshl等,但是一般
   都需要实现IClassFactory或者IClassFactory2接口。类厂接口的作用是提供一个通用的创建组件对象的
   方法。对于进程内组件在C++中我们可以使用new来创建新的对象,但是对于进程外或者是远程的组件,new
   好像是无能为力了,所以提供类厂接口,由类厂和代理打交道来完成对象的创建。
   3、组件程序中实现相关的导出函数,以便被其他应用程序调用,比如注册函数、生命周期控制函数等等。
   4、最后要牢记如果要有不清楚的地方多看MSDN,熟记一些常用的标准接口,对于套间、列集等要特别注意。
  
   无论是在MFC中使用嵌套类来实现COM,还是ATL中使用的多重继承来实现COM,抑或是使用ODL语言来编写
  接口的定义,其最基本都是上面所说的,只不过MFC和ATL中多了一些宏来替代直接使用C++编写的各种类定义、
  函数定义等,这样使程序看起来简洁,但是对于认识COM的原理其实并没有好处,所以在使用这些宏的时候看看
  它们的定义会帮助你更深刻的认识COM。ODL语言只是IDL语言的扩充,其实没有什么特别的地方,只要多看看,
  弄懂了一些关键字的意思就可以了,比如:interface、dispinterface、coclass、import、library、
  importlib、defult等等。
   总之要想深刻的认识COM,熟练的使用COM编程,就要如Don所说,多动手编程,多使用它们,并考虑它们
  是如何的工作起来的。

TAG:

 

评分:0

我来说两句

日历

« 2024-05-02  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 15627
  • 日志数: 11
  • 建立时间: 2010-05-31
  • 更新时间: 2010-07-22

RSS订阅

Open Toolbar