Как вызвать callback функцию c# из с++ dll

288
01 декабря 2017, 02:53

То есть в коде c# я хотел бы объявить функцию для c++ dll, чтобы она знала, какую функцию ей вызывать. И потом в процессе работы dll, чтобы сама dll вызывала функцию в c# и передавала ей допустим int.

Пока что получилось только инициализировать функцию и вызвать её прямо из функции инициализации, а как вызвать из другого места dll, грубо говоря для теста из цикла, чтобы она сама вызывалась, не получается.

C++

    extern "C"
    {
        typedef int(__stdcall* Callback)(long lCode, long lParamSize, void* pParam);
        __declspec(dllexport) int __stdcall _Initialize(const char* FileName, Callback cbFunction, int                 Code,
            const char*         Name, unsigned int        Option, unsigned int        Option2)
        {
            cbFunction(0, 0, nullptr);
            return 0;
        }
    }

  ...
    while(true)
    {
        // cbFunction(1, 2, nullptr);   ?????
    }
  ...

C#

    public delegate int CallbackDelegate(int lCode, int lParamSize, IntPtr pParam);
    [DllImport("Test.dll", CallingConvention = CallingConvention.StdCall)]
    public static extern int _Initialize(string FileName, CallbackDelegate cbFunction, int Code, string Name, uint Options, uint Options2);

    private int onCallback(int lCode, int lParamSize, IntPtr pParam)
    {
        Console.WriteLine("Callback Test");
        return 0;
    }

     ...
        CallbackDelegate del = new CallbackDelegate(onCallback);
        _Initialize("SomeFile.dat", del, 1000, "", 0, 4);
     ...
READ ALSO
Socket клиент-сервер

Socket клиент-сервер

Здравствуйте, реализую клиент-серверное десктопное приложение на C#-сервер и Java-клиент с использованием SocketРаботает по принципу колбэка,...

231
AngularJS, как сделать уникальные кнопки в ng-repeat

AngularJS, как сделать уникальные кнопки в ng-repeat

Всем привет, продолжаю постигать дзен вместе с AngularJSПроблема в следующем, у меня формируется список заказов в конце каждого заказа есть кнопка...

303