你要是知道COM只是一种规范就容易懂了;
简单的说就是不管是用什么语言写的,只要他被编译后形成的二进制文件符合COM技术所要求的接口的二进制表示规范就可以,这就使得COM组件可用诸如c,Vc++,vb等任何一种语言甚至你可以用汇编乃至直接编辑二进制文件来实现,即实现在二进制文件的兼容性。
简单的说就是不管是用什么语言写的,只要他被编译后形成的二进制文件符合COM技术所要求的接口的二进制表示规范就可以,这就使得COM组件可用诸如c,Vc++,vb等任何一种语言甚至你可以用汇编乃至直接编辑二进制文件来实现,即实现在二进制文件的兼容性。
简单的说就是不管是用什么语言写的,只要他被编译后形成的二进制文件符合COM技术所要求的接口的二进制表示规范就可以,这就使得COM组件可用诸如c,Vc++,vb等任何一种语言甚至你可以用汇编乃至直接编辑二进制文件来实现,即实现在二进制文件的兼容性。
看来你想把存储接口搞清楚了。VTABLE就是一个指针列表。而接口也是一个指针列表。所以才可以用VTABLE来描述接口。
其实,如果完全可以使用c语言的STRUCT定义一个函数指针数组来描述接口。那样会更加清楚。
对于含有虚函数的CLASS或者从虚函数派生的CLASS,只要在定义CLASS的时候没有NO_VTABLE的说明,它的实例的前四个字节就是指向VTABLE的指针。这是C++编译器规定的。(不过采用VIRTUAL方法继承的也许有些不同)
原代码层的重用,COM 是基于二进制代码的重用。其的重用包括:INTERFACE,CODE,LIB,
。。
另外一点在于它的版本控制能力。
其实说起COM在是一种对面对对象思想的发展,我不完全赞同。C++的面对对象由于是基于源码级的,因此在具体操作时,不是那么严格。
所以传出接口实例时用(this+4)即可!