2014-05-12 21 views
1

나는 COM 인터페이스는 제가 C#을 사용 IUnknown 개체를 전달할 수있는 방법이C#을 사용하여 IUnknown 인수를 COM 인터페이스에 전달하는 방법?

interface Client : IUnknown 
{ 
    [id(1)] HRESULT GetSomething 
    (
     enum SomeID someID, 
     [out] IUnknown **pUnknown 
    ); 
}; 

같이 정의했다?

// Get some object 

IntPtr ptrObj = IntPtr.Zero; 


Client.GetSomething(someID, out ptrObj); 
object obj = Marshal.GetUniqueObjectForIUnknown(ptrIProfferService); 

답변

4

당신은 아무것도 통과하지 않습니다

3

당신은 Marshal.GetUniqueObjectForIUnknown을 사용하기위한 RCW를 얻을 다음의 IUnknown을 대표하는 IntPtr입니다을 사용하고 아마, 당신은 개체에 대한 아무것도을 모르는 것입니다 가정 , 을 인터페이스 포인터로 반환합니다. 불투명 한 IUnknown은 모든 COM 인터페이스에서 구현됩니다. C#에서는 객체 의 객체가 될 것이며 관리되는 버전은 "아무것도 될 수 있습니다".

object retval; 
client.GetSomething(SomeID.Magic, out retval); 

를 그리고 아마 매직에 따라 실제 인터페이스 유형으로 반환 된 객체를 캐스팅하기 위해 당신에게 달려 : 그래서 기본 코드는 다음과 같습니다. 귀하의 질문에 전혀 힌트를 제공하지 않을 수도 있습니다, 당신은 아이디어를 가지고 COM 구성 요소의 설명서를 읽어야 할 것입니다.