将.NET事件从一个DLL提升到C ++ / CLI中的另一个DLL

时间:2018-10-24 00:39:12

标签: c++ event-handling c++-cli

我有一个本地C ++应用程序和两个用C#编写的dll。假设本机C ++应用程序是“ AnApp”,两个dll是“ RaiseEvent” .dll和“ HandleEvent” .dll
两个C#dll中的每一个都包含一个类。 RaiseEvent启动一个事件,HandleEvent订阅该事件,以执行称为“ ReceiveEvent”的方法。

在AnApp中,有一个C ++ / CLI类充当包装器。 在这个包装器中,我从RaiseEvent实例化一个对象,并从HandleEvent实例化另一个。
然后,事件被启动(我可以在调试器中看到它)。我期望该事件在HandleEvent类中处理,但是没有发生。我的意思是,它永远不会输入ReceiveEvent方法。

我把所有这些作为概念证明,我不确定它是否应该起作用。

所以,问题是,当通过C ++ / CLI包装器在本地C ++应用程序中使用每个dll时,是否可以处理一个.NET dll到另一个事件?

1 个答案:

答案 0 :(得分:-1)

不看一些示例代码就很难理解您的确切问题,但是我会去的。

实例化对象不足以将事件链接到事件处理程序。 该事件必须通过+=运算符

进行订阅
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);