Мой программный стек — это большой собственный базу кода на C++, затем тонкую оболочку C++/CLI и, наконец, приложение C# с графическим интерфейсом WPF. Я могу редактировать полный стек программного обеспечения. База кода C++ управляется событиями с использованием сигналов/слотов, например, их используют libevent или Qt. Теперь рассмотрим слот C++ viewUpdateRequested(), который должен инициировать повторную отрисовку в графическом интерфейсе C# WPF.
Я обнаружил, что могу получить триггер из C++/CLI для C#, создав обработчик событий в C++/CLI, на который C# может подписаться. Затем я могу вызвать событие в C++/CLI и даже передать некоторые аргументы. Однако это позволяет мне пройти только половину пути, от C++/CLI вверх по стеку программного обеспечения. Мне все еще нужно перейти от нативного кода к C++/CLI.
У меня сложилось впечатление, что в чистом нативном коде я не могу генерировать событие C#, потому что для этого потребуется компиляция с помощью / clr, а это, в свою очередь, делает класс пустым объектом, который не может содержать никаких собственных членов, что в конечном итоге нарушает мою реализацию сигнала/слота. Я что-то здесь пропустил?
Я нашел способ перейти от машинного кода к C++/CLI, передав указатель функции из C++/CLI в машинный код. Но это приводит к следующему стеку кода, который мне кажется некрасивым:
Код: Выделить всё
native code -(function pointer)-> C++/CLI -(event handler)-> C#/WPF
Есть ли что-то, что я могу упускаю из виду? Каким будет «чистый дизайн»?
Подробнее здесь: https://stackoverflow.com/questions/791 ... naged-code