COM オブジェクトを使用する C# .NET コードを作成しています。COM インターフェイスには、同じ名前のメソッドとイベントがあります。
このメソッドは IncidentCommander と呼ばれ、署名があります。
CommsLibrary.IGuardianComms.IncidentCommander(int, string, sbyte)
IncidentCommander とも呼ばれるイベントには、署名があります。
CommsLibrary.IGuardianCommsEvents.IncidentCommander(int, int, string, sbyte, System.DateTime)
次の方法でイベントにバインドしようとすると:
_modasCommsLibrary.CrewUpdate += ModasCommsLibraryOnCrewUpdate;
.NET では、次のコンパイル エラーが発生します。
「メソッド グループであるため、IncidentCommander に割り当てることはできません。」
メソッドにバインドしようとしているからだと思います。
.NET をメソッドではなくイベントに強制的にバインドする方法はありますか? リフレクションを使用してイベントを取得し、手動でバインドしようとしましたが、これも機能しません。
私が使用したコードは次のとおりです。
// bind to the incident commander event (because it has the same name as a method...)
var eventInfo = _modasCommsLibrary.GetType().GetEvent("IncidentCommander");
var methodInfo = this.GetType().GetMethod("ModasCommsLibraryOnIncidentCommander");
var handler = Delegate.CreateDelegate(eventInfo.EventHandlerType, _modasCommsLibrary, methodInfo);
また、次のように、COM インスタンスをイベント インターフェイスにキャストしようとしました (Hans が提案したように)。
((IGuardianCommsEvents) _modasCommsLibrary).IncidentCommander += ModasCommsLibraryOnIncidentCommander;
しかし、私は同じエラーが発生します
「メソッド グループであるため、IncidentCommander に割り当てることはできません。」