多数のイベントを持つ COM インターフェイスを公開するネイティブ C++ アプリケーションがあります。プラグインは、これらのイベントのサブセットをサブスクライブします。アプリケーションに CLR ホスティングのサポートを追加し、AppDomainManager から継承する C# "ローダー" アセンブリをロードするカスタム ホスト/アプリドメイン マネージャー インターフェイスを作成しました ( http://www.codeproject.com/Articles/416471の例に大まかに基づいています)。 /CLR-Hosting-Customizing-the-CLR) アプリケーションのマネージド プラグインをロードするために適切に動作しています。私が現在取り組んでいる問題は、アプリケーション イベントを、ローダーを介してマネージド プラグイン コールバック関数に動的に接続できるようにしたいということです。アプリケーションが COM インターフェイス経由で公開するすべてのイベントを反復処理し、プラグインで一致する関数 (name/params) を見つけて、イベント ハンドラーをアタッチしたいと考えています。マネージ (プラグイン) 側では、Reflection API (プラグイン アセンブリの反復処理と型/メソッドのチェック) を介してこれが可能ですが、COM インターフェイスを介して公開されたイベントのコレクションを管理されていない側。特別な tlbimp イベント/デリゲート タイプを使用して、イベント ハンドラーを静的にフックしています。
appInterface.Function += new _IApplicationEvents_FunctionEventHandler(Function);
この方法で各イベント ハンドラーを明示的にフックする方法はありますか? 私が疑問に思っているのは、相互運用機能を介して作成された特別なデリゲート型を反復処理し、マネージド クラスのリフレクション API を介して利用できる同じ種類の名前/パラメーター情報を取得する方法があるかどうかです。