如何在托管 C++ 中使用事件正确实现 C# 接口
How to correctly implement C# interface with event in managed C++
您好,我正在尝试在我的托管 C++ dll 中实现一个 C# 接口,如下所示:
public ref class MyClass : public IMyInterface
{
// Inherited via IMyInterface
virtual event EventHandler<MyEventArgs ^> ^ MyLoadedEvent;
public:
virtual event EventHandler<MyEventArgs ^> MyLoadedEvent
{
void add(MyEventArgs ^ f)
{
// some magic
}
void remove(MyEventArgs ^ f)
{
// some magic
}
}
}
但我不断收到两个错误:
1) 事件类型必须是 handle-to-delegate 类型
2) class 未能实现在 ...dll
中声明的接口成员函数 "MyLoadedEvent::add"
我在实现中遗漏了什么或者实现接口事件的正确方法是什么?
谢谢!
第一个错误是由于缺少 ^ 帽子引起的,第二个错误是由于未命名您实现的接口方法引起的。假设界面事件命名为 "Loaded",正确的语法应该类似于:
public ref class MyClass : IMyInterface {
EventHandler<MyEventArgs^>^ MyLoadedEventBackingStore;
public:
virtual event EventHandler<MyEventArgs^>^ MyLoadedEvent {
void add(EventHandler<MyEventArgs^>^ arg) = IMyInterface::Loaded::add {
MyLoadedEventBackingStore += arg;
}
void remove(EventHandler<MyEventArgs^>^ arg) = IMyInterface::Loaded::remove {
MyLoadedEventBackingStore -= arg;
}
}
};
您好,我正在尝试在我的托管 C++ dll 中实现一个 C# 接口,如下所示:
public ref class MyClass : public IMyInterface
{
// Inherited via IMyInterface
virtual event EventHandler<MyEventArgs ^> ^ MyLoadedEvent;
public:
virtual event EventHandler<MyEventArgs ^> MyLoadedEvent
{
void add(MyEventArgs ^ f)
{
// some magic
}
void remove(MyEventArgs ^ f)
{
// some magic
}
}
}
但我不断收到两个错误:
1) 事件类型必须是 handle-to-delegate 类型
2) class 未能实现在 ...dll
中声明的接口成员函数 "MyLoadedEvent::add"我在实现中遗漏了什么或者实现接口事件的正确方法是什么?
谢谢!
第一个错误是由于缺少 ^ 帽子引起的,第二个错误是由于未命名您实现的接口方法引起的。假设界面事件命名为 "Loaded",正确的语法应该类似于:
public ref class MyClass : IMyInterface {
EventHandler<MyEventArgs^>^ MyLoadedEventBackingStore;
public:
virtual event EventHandler<MyEventArgs^>^ MyLoadedEvent {
void add(EventHandler<MyEventArgs^>^ arg) = IMyInterface::Loaded::add {
MyLoadedEventBackingStore += arg;
}
void remove(EventHandler<MyEventArgs^>^ arg) = IMyInterface::Loaded::remove {
MyLoadedEventBackingStore -= arg;
}
}
};