Для обратного вызова из 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 (не пользовательской), то я бы не смог передать свою функцию обратного вызова в качестве параметра.Как мы имеем дело с этими случаями?Любые предложения приветствуются, спасибо.