0

是否可以将接口指针分配给另一个接口指针,其中两个接口指针都指向同一个类。下面是我的 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。它构建成功。但是运行时会抛出访问冲突异常。请让我知道是否有任何解决方案。

4

1 回答 1

1

不,不可能将指向一个 COM 接口的指针分配给另一个。当您为 IUnknown 查询接口时,您将始终获得指向实现对象的相同指针。但是当你查询一个特定的接口时,你会得到不同的指针。

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

convetion 总是返回相同的 IUnkown 指针的原因是,这允许检查对象的身份,尽管您为不同的接口获得不同的指针。

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

更多细节在这里

于 2013-10-24T07:39:24.450 回答