为什么COM是基与接口来通信的,这样有什么好处?客户应用程序调用一个DLL中的类,实际上它只是跟这个类的接口通信,并没有真正跟类通信,那接口和具体的实现这个接口的类是如何通信的?谢谢!!!!!!!

解决方案 »

  1.   

    通过 COM接口访问 COM对象实例. 
    看看 <COM 本质论>
      

  2.   

    to krh2001(边城浪子)那么说客户应用程序持终都是通过接口来访问类的了???我就不知道COM接口是如何访问COM对象实例的?你能讲解一下吗?
      

  3.   

    看看 <COM 本质论>
    COM也不是这么简单的, 不是我三两句话可以说清楚的,.其实,我了解的也不是很多
      

  4.   

    接口就是一张表vtable. 组件可以继承多个接口,这样就在组件对象内存中存在多个表,每个表的前三个表项都是IUnknown的三个方法的入口。比如组件CA:
    class CA : public IX, IY, IZ
    {
    ...
    };你如果拥有IX* pIX, 可以通过pIX->QueryInterface( riid, ppv ) 查询IY, IZ等,QueryInterface内部实质就是将ppv指向内存中不同的表头。而迟后联编则决定了实现。具体过程:客户初始化COM库,调用CoCreateInstance,COM库调用DllGetClassObject得到class factory, COM库创建class factory 对象,COM库通过class factory对象 的CreateInstance创建组件,并返回客户请求的接口。
    以上过程,可以使客户不必看见组件,只需要接口的声明就可以了,这样通过接口将客户和组件实现解耦--->>>>>COM的归宿点!
      

  5.   

    非常感谢HNET(星云)兄我还是不太明白你的意思,我还是不太理解接口是如何跟实现这个接口的类通信的,你能详细解析一下吗??谢谢!
      

  6.   

    客户应用程序不是调用一个DLL中的类,调用的是DLL中的导出函数,如果用C语言编写COM组件,怎么调用类呢。其实,大部分COM就是用一组特定的,按规范写成的DLL导出函数来互相交互操作的应用程序,比较特别一点的就是EXE文件调用EXE文件中的过程,其实看看MSDN也不太难,我学的时候总把它想的特别难,最后发现难的不是原理,难的是接口的规范太多,太复杂.
    可以找msdn中的例子,自己做一下修改,慢慢的就会熟悉了.
      

  7.   

    to xjjyx() 
    接口、类和导出函数到底是什么关系?
      

  8.   

    接口的定义在msdn中是一组提供访问COM对象的语义相关的函数,本质是函数。类一般是指c++语言的class,它大概是数据与过程的一个集合,得了解c++语言,导出函数是在dll的代码中加入dllexport 符号使别的程序能得到这个函数地址的函数。我的理解,不一定准确。
      

  9.   

    thanks在DLL中接口是如何跟实现这个接口的类通信的?
      

  10.   

    《COM技术内幕》好好看看吧。
      

  11.   

    在DLL中接口是如何跟实现这个接口的类通信的? 他们就是一个东西,接口是父类,实现是子类,可以互相进行类型转换。
    通过接口调用函数时,实质上调用的就是实现类(子类)中的函数,因为接口类是纯虚类,它的真正实现是在子类中实现的。
      

  12.   

    实际上接口是一个结构(struct),然后实体类里有一个嵌套类继承了这个结构,当调用厂类对象创建实体后,返回的是实体类嵌套类的一个对象指针。这个嵌套类对象实现了这个实体类的所有外部操作,在创建com实例时,让外界感觉好像返回的那个嵌套类对象指针就是com实体的指针。外界跟实体类交互是利用接口,接口是嵌套类的基类,接口的实例就是嵌套类,当然嵌套类跟实体类交互根本是没有限制的。
      

  13.   

    建议搂主仔细看看《COM本质论》的第一章
      

  14.   

    TO alaisalaix(流水落花春去也,天上人间) "根据接口指针指向的类对象地址"这个怎么理解?你能否解析一下?谢谢!
      

  15.   

    如果一张帖了就可以将 COM 清楚, 那么 不明白 为什么那些 COM 的顶级大师 要定那么厚的一本书来阐述了.