你要是知道COM只是一种规范就容易懂了;
简单的说就是不管是用什么语言写的,只要他被编译后形成的二进制文件符合COM技术所要求的接口的二进制表示规范就可以,这就使得COM组件可用诸如c,Vc++,vb等任何一种语言甚至你可以用汇编乃至直接编辑二进制文件来实现,即实现在二进制文件的兼容性。

解决方案 »

  1.   

    你要是知道COM只是一种规范就容易懂了;
    简单的说就是不管是用什么语言写的,只要他被编译后形成的二进制文件符合COM技术所要求的接口的二进制表示规范就可以,这就使得COM组件可用诸如c,Vc++,vb等任何一种语言甚至你可以用汇编乃至直接编辑二进制文件来实现,即实现在二进制文件的兼容性。
      

  2.   

    我的理解是,用不同的编程语言生成的对象二进制代码,可以用同样的规则访问其vtable
      

  3.   

    我赞成fengye的发言,但这是不是指vtable在类中的位置不能随意变动只在开始4个字节
      

  4.   

    "这是不是指vtable在类中的位置不能随意变动只在开始4个字节"
    看来你想把存储接口搞清楚了。VTABLE就是一个指针列表。而接口也是一个指针列表。所以才可以用VTABLE来描述接口。
    其实,如果完全可以使用c语言的STRUCT定义一个函数指针数组来描述接口。那样会更加清楚。
    对于含有虚函数的CLASS或者从虚函数派生的CLASS,只要在定义CLASS的时候没有NO_VTABLE的说明,它的实例的前四个字节就是指向VTABLE的指针。这是C++编译器规定的。(不过采用VIRTUAL方法继承的也许有些不同)
      

  5.   

    我认为“对象二进制代码”的提出是针对C++ 的OBJECT INHERIT MECHANIASM 。C++的采用
    原代码层的重用,COM 是基于二进制代码的重用。其的重用包括:INTERFACE,CODE,LIB,
    。。
      

  6.   

        COM最重要的一点在于它的二进制封装,也就是说与具体编程语言的无关性。这部分内容类似于以前的DLL,但解决了DLL存在的许多问题。
       另外一点在于它的版本控制能力。
       其实说起COM在是一种对面对对象思想的发展,我不完全赞同。C++的面对对象由于是基于源码级的,因此在具体操作时,不是那么严格。
      

  7.   

    Sunlet, 我是不是可以这样理解,采用虚继承的类,由于开头四个字节为btable,
    所以传出接口实例时用(this+4)即可!
      

  8.   

    但到底该怎样正确理解com的二进制兼容性呢?