在 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);