描述:
创建一个com组件的对象有多种办法,每种办法得到的都是一个指向获得的特定接口的指针。就向c++的对象一样,每个com组件对象都有自己的一份数据拷贝,但是却共用一份的函数拷贝。因此,对于同一个com组件,创建的每一个对象获得的都应该是指向同一个内存中虚函数表中,那么得到这样的指针以后,我怎么针对特定的对象进行操作呢?或者说,创建一个com对象后,它的this指针放在哪里,我怎么去获得呢?
解决方案1:
补充一点,C++的this问题,建议看一下《C++组件对象模型》,可能有答案
解决方案2: 楼上讲得好长。
我先前说的有错误,我更正一下:
this指针是指向当前类实例的指针,类实例是一群数据成员的集合,其中包括vtbl指针,通过多继承方法得到的类的类实例,包含它所继承的所有接口的vtbl的指针,我们可以使用static_case<IXXX*>把this指针强制转换为指向对应IXXX接口的vtbl的指针的指针(因为vtbl指针是类实例的数据成员,编译器只需调整this指针加上一个适当的偏移量即可指向它)。很显然我们通过this指针强制转换,从而得到了指向vtbl的指针的指针,也就得到了所谓的借口指针。
另外,类的各个实例将共享相同的vtbl(但各自拥有指向它的指针)和函数实现。
我本来就是说的接口指针是一个接口的指针,只不过这个结构的成员变量只有一个,就是一个指向虚函数表的指针(因为那个结构是个纯虚基类),因此也就是楼主所谓的“指向对象中一个指向虚函数表的指针”
解决方案4:COM只是一种调用约定,对象不一定是在本进程内,甚至有可能在其它计算机上,其它计算机可以运行不同的操作系统