在C ++中将一个接口指针指向另一个接口指针

时间:2013-10-24 06:15:51

标签: c# c++ com

是否可以将接口指针分配给另一个接口指针,其中两个接口指针指向同一个类。  下面是我的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。如果有任何解决方案,请告诉我。

1 个答案:

答案 0 :(得分:1)

没有。无法将指向一个COM接口的指针分配给另一个COM接口。当您使用IUnknown的QueryInterface时,您将始终获得指向实现对象的相同指针。但是当您查询特定接口时,您将获得不同的指针。

原因是指针指向VMT指针。当你对IUnknown有不同的不满时,你需要不同的VMT。这就是为什么QueryInterface必须在不同的地址选择正确的VMT的原因。

对象总是返回相同的IUnkown指针的原因是,它允许检查对象的身份,尽管你得到了不同接口的不同指针。

所以你要求的解决方案:不要(隐式)转换COM接口指针。使用QueryInterface()获取正确的指针。

更多细节是here