2013-10-24 77 views
0

是否可以将接口指针分配给另一个接口指针,其中两个接口指针都指向同一个类。下面 是我的Test.h和Test.cpp的将一个接口指针分配给C++中的另一个接口指针

class Test 
    { 
     ITestPtr testPtr; 
     ITestSecondPtr secondPtr; 
    }; 

Test:: Test() 
    { 
    testPtr.CreateInstance(__uuidof(MyNamespace::MyClass)); 
    secondPtr=testPtr; 
    } 

这里我ITestPtr和ITestSecondPtr指向同一个C#类MyClass的代码。因此为了避免C#类的双重初始化,我将testPtr分配给了secondPtr。 它建立成功。但运行时会引发访问冲突紧张。请让我知道,如果有任何解决方案。

+3

'testPtr.QueryInterface(&secondPtr);',至少是这样,你可以在C++中使用MS的'comdef'智能接口包装库来做到这一点。你在做什么语言,我不知道,因为你把它标记为C++,但在你的问题中只提到了C#。 – WhozCraig

+0

+1给WhozCraig,就是这样做。 –

+0

@WhozCraig看起来他使用C++/CLI,而他提到的C#类来自DLL或其他东西。 –

回答

1

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

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

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

所以你的请求的解决方案:不要(隐式)投射COM接口指针。使用QueryInterface()来获得正确的指针。

更多详细信息是here

+0

@haper:Thanx for Reply。 QueryInterface()给了我正确的答案。 – SkoolBoyAtWork

相关问题