2011-01-23 12 views
0

参照するCOM DLLがあります。コールバックパラメータが必要なメソッドもあります。私は反射鏡のinterop.MyComLib.dllを確認しました:イベントコールバックパラメータを.COMでCOMオブジェクトに送信する方法

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

このパラメータはどのように送信しますか?デリゲート(コンパイル例外)を送信できません。私はthisを送ろうとしており、InvalidCastExceptionを受け取りました。

答えて

1

IDispatchはCOMインターフェイスです。クラスで[ComVisible(true)]および[ClassInterface(ClassInterfaceType.AutoDispatch)]属性を使用すると、CLRによって自動的に実装されます。その後、クラスのインスタンスを渡すことができ、キャストは成功します。コードはおそらく、そのクラスで何らかのメソッドを呼び出すため、実装されていることを確認します。どのような方法であろうとその署名がどのように見えるべきかという問題からは明らかではない。正確に一致する必要があります。不一致は、診断なしでコールバックが発生することを防ぐ傾向があります。

0

IDispatchのオブジェクトを渡したい場合、DispIdが0のメソッドがあります。IDispatchを作成する方法についてはthis articleを参照し、DispId(0)を使用して1つのメソッドを指定します。

関連する問題