COM的QueryInterface与NonDelegatingQueryInterface的测试用例
2022-01-08
99
0
在COM中,函数的调用实际是汇编 call 函数地址.对于一个类里定义的函数实际是一个一个的地址偏移.如果地址偏移是一样而且参数个数与排列都一样,函数叫什么名字是没有关系的。
这里关于这句话做一个测试用例,用于测试COMM的妙用:
#include <iostream>
#include <stdio.h>
class A
{
virtual void NonDelegatingQueryInterface() = 0;
};
class B : public A
{
virtual void Hello()
{
printf("hello B\n");
}
};
class C
{
public:
virtual void QueryInterface()
{
printf("hello C\n");
}
};
class D :public C, public B
{
public:
virtual void NonDelegatingQueryInterface()
{
printf("NonDelegatingQueryInterface \n");
}
void Test()
{
((C*)(A*)this)->QueryInterface();
}
};
int main()
{
D* p = new D();
p->Test();
return 0;
}
执行结果:
NonDelegatingQueryInterface