所以我有一个C#类,它有以下事件:
public class CSClient
{
public delegate void OnMessageHandler(Object sender, EventArgs e);
public event OnMessageHandler OnOptionsEvent;
}
然后我有一个C ++ / CLI类,我想订阅OnOptionsEvent。
我尝试过这样的事情:
void CSClientWrapper::Start()
{
GCHandle h = GCHandle::FromIntPtr(IntPtr(_impl));
CSClient^ obj = safe_cast<CSClient^>(h.Target);
__hook(&CSClient::OnOptionsEvent, obj, &CSClientWrapper::OnOptions);
}
void CSClientWrapper::OnOptions(Object^ sender, EventArgs^ args)
{
}
错误C2039:'add_OnOptionsEvent':不是'CSClient'的成员
错误C2750:'CSClient :: OnMessageHandler':无法使用'new' 参考类型;使用'gcnew'代替
我对C ++ CLI完全不熟悉,所以我怀疑这是一个非常重要的东西。
答案 0 :(得分:3)
是的,这不是合适的语法。最好忘记__hook关键字存在,将事件处理语法添加到本机C ++是一个相当错误的想法。您需要创建一个托管委托来订阅该事件,正确的语法应该接近:
CSClient^ obj = safe_cast<CSClient^>(h.Target);
obj->OnOptionsEvent +=
gcnew CSClient::OnMessageHandler(this, &CSClientWrapper::OnOptions);