2013-12-12 4 views
0

C++ & C# 사이에서 통신하는 데 COM을 사용하고 있습니다. 내 문제는 인터페이스가 다른 C++ 클래스에 의해 다시 구현되는 C++ 클래스에 의해 구현 된 인터페이스 객체 &으로 매개 변수를 포함하는 메서드를 구현했습니다. C#에서 내 코드 시나리오가 아래에 언급되어C#에서 상속받은 C# 인터페이스

다음은 C++ 비아 컴에 노출 대해 ComVisible을있는 클래스 먼저뿐만 아니라 ITest 인터페이스
namespace Example 
    { 

    public class First:ITest 
     { 

     void GetObjectOfC#Interface(ISample sample); 
     } 
    } 

    namespace Example 
    { 
    Interface ISample 
    { 
     void Test(); 

    } 
    } 

. IS 예제 인터페이스는 COM에서 노출되었지만 C# 클래스에서는 구현되지 않았습니다. C++에서

코드 시나리오 :

이 SampleFirst 클래스는 다시 다음과 같이 또 다른 C++ 클래스 헤더 파일에 상속됩니다
Class SampleFirst: public Example::ISample 
    { 
    }; 

:

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); 
    } 

여기에서는 Inheritanc을 고려하여 samplePtr에 할당 된 동일한 클래스 개체를 의미합니다. 전자 기능. .tli 파일에서 HResult를 실패합니다. 같은 해결 방법이 있으면 알려주십시오.

+0

[이] (http://stackoverflow.com/questions/1742848/why-exactly-do-i-need-an- 충분하다 explicit-upcast-implement-query -interface-in-a/2812938 # 2812938) 내 문제를 해결하는 데 도움이됩니다. – SkoolBoyAtWork

답변

2

만의 QueryInterface에서 (ISample)this 즉 단순 주조에 의한 정적 캐스트의 필요

+0

: 귀하의 ans도 나를 위해 작동합니다. – SkoolBoyAtWork

0

위의 문제를 해결하려면이 Link은 QueryInterface를 구현하는 동안 어리석은 실수를 저지르고 인터페이스 포인터가 혼란 스럽기 때문에 매우 유용합니다.

관련 문제