0

COM dll を参照しています。一部のメソッドは、コールバック パラメータを必要とします。リフレクターで interop.MyComLib.dll を確認しました。

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

このパラメーターを送信するにはどうすればよいですか? デリゲートを送信できません (コンパイル例外)。送信thisして受信しましInvalidCastExceptionた。

4

2 に答える 2

1

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

于 2011-01-23T15:04:11.247 に答える
0

IDispatch であり、DispId が 0 のメソッドを持つオブジェクトを渡したいと考えています。IDispatch の作成方法については、この記事を参照してから、DispId(0) を使用して単一のメソッドを指定してください。

于 2011-01-23T15:10:34.497 に答える