Обратный вызов из C++ в C# внутри другой функции обратного вызова C++

Чтобы выполнить обратный вызов с C++ на C#, мы можем сделать это так:

C++:

void DoWork(ProgressCallback progressCallback)
{
   progressCallback(0);
}

C#:

[UnmanagedFunctionPointer(CallingConvention.StdCall)]
delegate void ProgressCallback(int value);

static void main() {
    ProgressCallback callback =
        (value) =>
        {
            Console.WriteLine("Progress = {0}", value);
        };

    DoWork(callback);
}

Вышеупомянутая реализация работает только путем передачи обратного вызова в качестве параметра функции. Но я хочу иметь возможность выполнять обратный вызов функции внутри другой функции обратного вызова в C++. Например, если у вас есть событие, которое дает вам время с помощью функции обратного вызова OnTimeUpdated(), я хочу отправить эту обновленную информацию о времени, вызвав функцию обратного вызова «C++ to C#» INSIDE OnTimeUpdated(), чтобы сторона C# могла получить доступ к информация о времени. Проблема в том, что если бы OnTimeUpdated() был функцией обратного вызова API (не настраиваемой), то я не смог бы передать свою функцию обратного вызова в качестве параметра. Как мы справляемся с этими случаями? Любые предложения приветствуются, спасибо.

Вы действительно используете C++ cli? Если да, то пометьте свой вопрос соответствующим образом.

πάντα ῥεῖ 14.12.2018 18:26

Я не использую C++ / cli. Доступ к коду C++ осуществляется через DLLImport.

Taylor 14.12.2018 18:27

Когда я правильно понимаю, вы ищете способ вызвать обратный вызов с «другой стороны», как описывает ваш код. Я думаю, что это возможно только с C++ / CLR.

H.G. Sandhagen 14.12.2018 18:29

Я думаю, что это возможно только через C++ / CLR или COM.

Nick 14.12.2018 18:34

Приведенный выше код делает возможным обратный вызов с «другой стороны» без использования C++ / CLR. Мой вопрос: с учетом уже существующей функции обратного вызова, есть ли способ вызвать мою настраиваемую функцию обратного вызова ВНУТРИ этой уже существующей, чтобы обратные вызовы Windows API могли напрямую перемещаться на сторону C#.

Taylor 14.12.2018 18:34
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
5
384
0

Другие вопросы по теме