是否可以将接口指针分配给另一个接口指针,其中两个接口指针指向同一个类。 下面是我的Test.h和Test.cpp的代码
class Test
{
ITestPtr testPtr;
ITestSecondPtr secondPtr;
};
Test:: Test()
{
testPtr.CreateInstance(__uuidof(MyNamespace::MyClass));
secondPtr=testPtr;
}
这里我的ITestPtr和ITestSecondPtr指向同一个C#类MyClass。 因此,为了避免C#类的双重初始化,我将testPtr分配给了secondPtr。 它是成功构建的。但是Runtime会抛出Access Violation Excpeption。如果有任何解决方案,请告诉我。
答案 0 :(得分:1)
没有。无法将指向一个COM接口的指针分配给另一个COM接口。当您使用IUnknown的QueryInterface时,您将始终获得指向实现对象的相同指针。但是当您查询特定接口时,您将获得不同的指针。
原因是指针指向VMT指针。当你对IUnknown有不同的不满时,你需要不同的VMT。这就是为什么QueryInterface必须在不同的地址选择正确的VMT的原因。
对象总是返回相同的IUnkown指针的原因是,它允许检查对象的身份,尽管你得到了不同接口的不同指针。
所以你要求的解决方案:不要(隐式)转换COM接口指针。使用QueryInterface()
获取正确的指针。
更多细节是here。