簡體   English   中英

在C ++中將一個接口指針分配給另一個接口指針

[英]Assign one interface pointer to another interface pointer in C++

是否可以將接口指針分配給另一個接口指針,而這兩個接口指針都指向同一類。 下面是我的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。 它已成功構建。 但是運行時會拋出訪問沖突示例。 請讓我知道是否有解決方案。

不可以。不可能將一個COM接口的指針分配給另一個COM接口。 當您為IUnknown使用QueryInterface時,您將始終獲得指向實現對象的相同指針。 但是,當您查詢特定的接口時,您將獲得不同的指針。

原因是該指針指向VMT指針。 如果IUnknown具有不同的繼承關系,則需要不同的VMT。 這就是QueryInterface必須在其他地址選擇正確的VMT的原因。

對流返回總是相同的IUnkown指針的原因是,盡管您為不同的接口獲得了不同的指針,但是這允許檢查對象的身份。

因此,您需要的解決方案是:不要(隱式)強制轉換COM接口指針。 使用QueryInterface()獲取正確的指針。

更多細節在這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM