在 C++/CLI 中将 .NET 事件从一个 DLL 提升到另一个
Raise .NET event from one DLL to another in C++/CLI
我有一个本机 C++ 应用程序和两个用 C# 编写的 dll。假设本机 C++ 应用程序是 'AnApp',两个 dll 是 'RaiseEvent'.dll 和 'HandleEvent'.dll
这两个 C# dll 中的每一个都包含一个 class。 RaiseEvent 启动一个事件,HandleEvent 订阅该事件以执行名为 'ReceiveEvent'.
的方法
在 AnApp 中,有一个用作包装器的 C++/CLI class。
在这个包装器中,我从 RaiseEvent 实例化一个对象,从 HandleEvent 实例化另一个对象。
然后,启动事件(我可以在调试器中看到它)。我期待在 HandleEvent class 中处理该事件,但它没有发生。我的意思是,它永远不会进入 ReceiveEvent 方法。
我做了所有这些作为概念验证,我不确定它是否应该起作用。
所以,问题是,当每个 dll 通过 C++/CLI 包装器在本机 C++ 应用程序中使用时,是否可以处理从一个 .NET dll 到另一个的事件?
如果没有看到一些示例代码,很难理解您的确切问题,但我会试一试。
实例化对象不足以 link 将事件传递给事件处理程序。
必须通过 +=
运算符
订阅该事件
var raiseEvent = new RaiseEvent();
var handleEvent = new HandleEvent();
raiseEvent.TheEvent += handleEvent.ReceiveEvent;
我不建议像这样公开公开 ReceiveEvent
函数。
但是 HandleEvent
对象需要访问 TheEvent
实例才能订阅它。
可能是这样的:
class HandleEvent
{
//...
public void Subscribe(RaiseEvent eventRaiser)
{
eventRaiser.TheEvent += this.ReceiveEvent;
}
}
//...
var raiseEvent = new RaiseEvent();
var handleEvent = new HandleEvent();
handleEvent.Subscribe(raiseEvent);
我有一个本机 C++ 应用程序和两个用 C# 编写的 dll。假设本机 C++ 应用程序是 'AnApp',两个 dll 是 'RaiseEvent'.dll 和 'HandleEvent'.dll
这两个 C# dll 中的每一个都包含一个 class。 RaiseEvent 启动一个事件,HandleEvent 订阅该事件以执行名为 'ReceiveEvent'.
在 AnApp 中,有一个用作包装器的 C++/CLI class。
在这个包装器中,我从 RaiseEvent 实例化一个对象,从 HandleEvent 实例化另一个对象。
然后,启动事件(我可以在调试器中看到它)。我期待在 HandleEvent class 中处理该事件,但它没有发生。我的意思是,它永远不会进入 ReceiveEvent 方法。
我做了所有这些作为概念验证,我不确定它是否应该起作用。
所以,问题是,当每个 dll 通过 C++/CLI 包装器在本机 C++ 应用程序中使用时,是否可以处理从一个 .NET dll 到另一个的事件?
如果没有看到一些示例代码,很难理解您的确切问题,但我会试一试。
实例化对象不足以 link 将事件传递给事件处理程序。
必须通过 +=
运算符
var raiseEvent = new RaiseEvent();
var handleEvent = new HandleEvent();
raiseEvent.TheEvent += handleEvent.ReceiveEvent;
我不建议像这样公开公开 ReceiveEvent
函数。
但是 HandleEvent
对象需要访问 TheEvent
实例才能订阅它。
可能是这样的:
class HandleEvent
{
//...
public void Subscribe(RaiseEvent eventRaiser)
{
eventRaiser.TheEvent += this.ReceiveEvent;
}
}
//...
var raiseEvent = new RaiseEvent();
var handleEvent = new HandleEvent();
handleEvent.Subscribe(raiseEvent);