Обтекание обратного вызова C в C ++ / CLI - PullRequest
1 голос
/ 21 октября 2011

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

Теперь я пишу оболочку ( DLL ) для этого на C ++ / CLI. Этот Wrapper Dll будет использоваться в приложении C #.

Как реализовать обратный вызов в C ++ / CLI, чтобы код C # мог зарегистрировать его и получить от него видеоданные.

1 Ответ

2 голосов
/ 21 октября 2011

В C ++ / CLI вы можете иметь статические функции (с собственной сигнатурой C, которая может работать как обратный вызов из библиотеки C), вызывая управляемых делегатов:

// MyDispatcherClass.h
#pragma once

public delegate void MyDelegateType();

public ref class MyDispatcherClass
{
public:
    static MyDelegateType^ MyDelegate;
};

static void MyCallback(/*...*/)
{
    if (MyDispatcherClass::MyDelegate != nullptr)
        MyDispatcherClass::MyDelegate(/* do some type mapping here if needed */);
}


// MyDispatcherClass.cpp: 
#include "stdafx.h"
#include "MyDispatcherClass.h"

Так зарегистрируйтесь MyCallback ввашей библиотеки C, зарегистрируйте делегата C # на MyDispatcherClass::MyDelegate и все готово.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...