「混合」クラスインスタンスからメソッドを指す.NETデリゲートを初期化する方法はありますか?
次のようにC++クラスを「混合」しました:
class CppMixClass
{
public:
CppMixClass(void){
dotNETclass->StateChanged += gcnew DotNetClass::ServiceStateEventHandler(&UpdateHealthState);
}
~CppMixClass(void);
void UpdateState(System::Object^ sender, DotNetClass::StateEventArgs^ e){
//doSmth
}
}
DotNetClassはC#で実装、メソッド宣言はデリゲートでOK。この行はエラーを生成します:
dotNETclass->StateChanged += gcnew DotNetClass::ServiceStateEventHandler(&UpdateHealthState);
error C2276: '&' : illegal operation on bound member function expression
誰でも問題についての手がかりを持っていますか? CppMixClass クラスは純粋な .NET (ref) クラスではないのでしょうか?
UpdateHealthState が静的メソッドの場合にこれを機能させましたが、インスタンス メソッドへのポインターが必要です。
私は次のように試してみました:
dotNETclass->StateChanged += gcnew DotNetClass::ServiceStateEventHandler(this, &UpdateHealthState);
しかし、これは明らかに機能しません。これは、.NET (ref) クラス (System::Object) へのポインター (ハンドル) ではないためです。
ServiceStateEventHandler は C# で次のように定義されています。
public delegate void ServiceStateEventHandler(object sender, ServiceStateEventArgs e);
これを読んでくれてありがとう:)