Вызывать .NET событие из одной DLL в другую в C ++ / CLI - PullRequest
0 голосов
/ 24 октября 2018

У меня есть родное приложение C ++ и две DLL, написанные на C #.Давайте скажем, что родным C ++-приложением является AnApp, а двумя dll являются RaiseEvent.dll и HandleEvent.dll
Каждый из двух C # dll содержит класс.RaiseEvent запускает событие, а HandleEvent подписывается на это событие, чтобы выполнить метод с именем ReceiveEvent.

В AnApp существует класс C ++ / CLI, который служит оболочкой.В этой оболочке я создаю экземпляр объекта из RaiseEvent, а другой - из HandleEvent.
Затем запускается событие (я вижу его в отладчике).Я ожидал, что событие будет обработано в классе HandleEvent, но этого не произошло.Я имею в виду, что он никогда не входит в метод ReceiveEvent.

Я сделал все это как доказательство концепции, я не был уверен, что это должно было сработать.

Итак, вопросВозможно ли обработать событие от одной DLL-библиотеки .NET к другой, когда каждая DLL используется в собственном приложении C ++ через оболочку C ++ / CLI?

1 Ответ

0 голосов
/ 24 октября 2018

Трудно понять вашу конкретную проблему, не увидев пример кода, но я пойду.

Инстанцирования объектов недостаточно, чтобы связать событие с обработчиком события.На событие необходимо подписаться через оператора +=

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