2011-01-23 6 views
0

참조 된 COM DLL이 있습니다. 일부 메소드는 콜백 매개 변수를 필요로합니다. interop.MyComLib.dll을 리플렉터에서 확인했습니다.. NET을 사용하여 COM 개체에 이벤트 콜백 매개 변수를 보내는 방법

public virtual extern void Foo([In, MarshalAs(UnmanagedType.IDispatch)] object pDispProgressCallBack); 

이 매개 변수는 어떻게 전송합니까? 델리게이트 (컴파일 예외)를 보낼 수 없습니다. this을 보내고 InvalidCastException을 받았습니다.

답변

1

IDispatch는 COM 인터페이스입니다. CLR은 [ComVisible (true)] 및 [ClassInterface (ClassInterfaceType.AutoDispatch)] 특성을 클래스에 사용하면 자동으로 구현합니다. 그런 다음 클래스의 인스턴스를 전달하면 캐스트가 성공합니다. 코드는 그 클래스에 대해 일종의 메소드를 호출 할 것이므로 구현되었는지 확인하십시오. 그것이 어떤 방법 일지와 그 서명이 어떻게 보이는지에 대한 질문에서 분명하지 않습니다. 정확히 일치해야합니다. 불일치는 진단없이 콜백이 발생하는 것을 방지해야합니다.

0

IDispatch이고 DispId가 0 인 메서드를 전달하려고합니다. IDispatch를 만드는 방법은 this article을 참조한 다음 DispId (0)를 사용하여 단일 메서드를 제공하십시오.

관련 문제