.NETを使用してイベントコールバックパラメーターをcomオブジェクトに送信する方法
-
23-10-2019 - |
質問
com dllを参照しています。一部の方法では、コールバックパラメーターが期待されています。 Interop.mycomlib.dllをリフレクターで確認しました。
public virtual extern void Foo([In, MarshalAs(UnmanagedType.IDispatch)] object pDispProgressCallBack);
このパラメーターを送信するにはどうすればよいですか?デリゲート(コンピレーションの例外)を送信できません。送信してみました this
そして受け取った InvalidCastException
.
解決
IdisPatchはCOMインターフェイスです。クラスに[comvisible(true)]および[classInterface(classInterfaceType.autodispatch)]属性を使用すると、CLRは自動的に実装します。その後、クラスのインスタンスを渡すと、キャストが成功します。コードはおそらくそのクラスのある種の方法を呼び出すでしょうので、それが実装されていることを確認してください。どんな方法であり、その署名がどのように見えるべきかという質問からは明らかではありません。それは正確に一致する必要があります。不一致は、診断なしでコールバックが発生するのを防ぐ責任です。
他のヒント
Idispatchであり、Dispide 0のメソッドを持っているオブジェクトを渡したいです。 この記事 IdisPatchを作成する方法については、Dispid(0)を使用して単一のメソッドを指定します。
所属していません StackOverflow