2013-12-12 4 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++ Via Com. Интерфейс ISample также отображается в COM, но не реализован C# классом First.

код сценария в C++:

Class SampleFirst: public Example::ISample 
    { 
    }; 

Этот класс SampleFirst снова наследуется другой файл C++ Class заголовка, как показано ниже:

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 Функциональность. , но в файле .tli, сбой HResult. Пожалуйста, дайте мне знать, если какое-либо решение для него.

+0

[это] (http://stackoverflow.com/questions/1742848/why-exactly-do-i-need-an- явный-upcast-when-implementation-queryinterface-in-a/2812938 # 2812938) полезен для решения моей проблемы. – SkoolBoyAtWork

ответ

2

Нет необходимости статического гипсе только путем простого литья, т.е. (ISample)this в QueryInterface достаточно

+0

: ваши анды также работают для меня – SkoolBoyAtWork

0

Для решения вышеуказанной проблемы этот Link очень полезен, поскольку я делал глупую ошибку при реализации QueryInterface, и их было путаницей для указателя интерфейса.

Смежные вопросы