Чтобы выполнить обратный вызов с 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. Доступ к коду C++ осуществляется через DLLImport.
Когда я правильно понимаю, вы ищете способ вызвать обратный вызов с «другой стороны», как описывает ваш код. Я думаю, что это возможно только с C++ / CLR.
Я думаю, что это возможно только через C++ / CLR или COM.
Приведенный выше код делает возможным обратный вызов с «другой стороны» без использования C++ / CLR. Мой вопрос: с учетом уже существующей функции обратного вызова, есть ли способ вызвать мою настраиваемую функцию обратного вызова ВНУТРИ этой уже существующей, чтобы обратные вызовы Windows API могли напрямую перемещаться на сторону C#.





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