Вызов (C #) .NET Core метода из переполнения стека

У меня есть 2 компонента:
— .Приложение Net Core, работающее в ОС Ubuntu.
— Совместная библиотека C ++ (.so)

Теперь я хочу, чтобы компонент C ++ мог вызывать метод .Net Core, либо передавая интерфейс компоненту C ++, который будет использовать этот интерфейс для реализации метода обратного вызова, либо передавая метод в качестве параметра компоненту C ++.

Пример высокого уровня, чего я пытаюсь достичь:
Компонент C #:

public interface IDevice
{
void OnDataAvailable(string data);
}

public class Device: IDevice
{
[DllImport("sampleCPPLibrary.so")]
private static extern int SetReceiver(IDevice receiver);
public void OnDataAvailable(string data)
{
Console.WriteLine(data);
}
public void Initialize()
{
SetReceiver(IDevice(this))
}
}

Компонент C ++:

extern "C" {
void SetReceiver(IReceiver * receiver)
{
receiver->OnDataAvailable(10);
}
}

По сути, я пытаюсь передать некий «обратный вызов» компоненту C ++ и вызвать этот «обратный вызов», когда в компоненте C ++ происходит какое-то событие.

7

Решение

Увидеть Смотрите эту проблему из комментариев я построил код, где C # вызывает C и дает ему callback-делегат. Таким образом, из C он вызывает C # и передает дополнительный аргумент типа int. Смотрите комментарии здесь от проекта Endurox, и приложил c-callback.tar.gz для рабочего примера.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector