2013-12-12 65 views
0

我使用COM在C++ & C#之間進行通信。我的問題是我已經實現了包含參數作爲接口對象&的方法,該接口是由C++類實現的,該類又由另一個C++類實現。 在C#我的代碼情景被提到如下:由C++繼承的C#接口

namespace Example 
    { 

    public class First:ITest 
     { 

     void GetObjectOfC#Interface(ISample sample); 
     } 
    } 

    namespace Example 
    { 
    Interface ISample 
    { 
     void Test(); 

    } 
    } 

的頭等艙以及ITest接口這些標記有ComVisible特性,暴露在C++通過COM。 ISample接口也暴露在COM中,但未由C#類實現。

代碼情景在C++:

Class SampleFirst: public Example::ISample 
    { 
    }; 

這SampleFirst類再次由如下面的另一C++類的頭文件繼承:

Class SampleSecond:public SampleFirst 
{ 
    public: 
     void MakeAnObject(); 
    private: 
     Example::ITestPtr _testPtr; 
     Example::ISamplePtr _samplePtr; 
}; 

和在SampleSecond.Cpp文件,

void SampleSecond::MakeAnObject() 
    { 
    _testPtr.CreateInstance(__uuidof(Example::First)); 

     samplePtr=this; 

    _testPtr->GetObjectOfC#Interface(samplePtr); 
    } 

這裏這意味着相同的類對象分配給samplePtr通過考慮Inheritanc e功能。 但在.tli文件中,失敗HResult.Please讓我知道如果任何解決方案相同。

+0

[這](http://stackoverflow.com/questions/1742848/why-exactly-do-i-need-an- (2812938#2812938)有助於我解決我的問題。 – SkoolBoyAtWork

回答

2

僅通過簡單的鑄件即的QueryInterface (ISample)this無需靜態鑄造的足夠

+0

:你的ans也爲我工作 – SkoolBoyAtWork

0

爲了解決上述問題,這個Link是非常有用的,因爲我在執行QueryInterface時做了一個愚蠢的錯誤,並且他們對接口指針感到困惑。