描述:
最近在学习COM,遇到一个问题,请大侠们指教:
在我的印象里,COM结构里面,接口(比如ITest)里面全是纯virtual 函数,然后会有一个CTest: ITest,在CTest里面实现那些纯虚函数。
在调用这个COM里面的函数时,
ITest p;
...QueryInterface(IID_test, (void**)&p);
然后使得p可以指向CTest里面的虚函数实现,我想知道,p是在什么时候让虚拟函数表里的函数指针指向了CTest的函数的?
在最初编译COM的时候?还是CoInitialize()的时候?还是在QueryInterface的时候?
解决方案1:
当然是QueryInterface时,随便找COM或者ATL的书就可以看到它的实现。
更何况这是运行代码,你提的其它两个选项肯定不可能呀。
QueryInterface !
CTest:publci ITest
In fact ,the vtable pointer is the first data member of CTest class,when you
use QueryInterface,the class factory will create a CTest object for you,then
p is assigned just like this:
CTest *pTest=new CTest;
ITest *p=static_cast<ITest*>pTest;