Передача функции обратного вызова C # через Interop / pinvoke

Я пишу приложение на C #, которое использует службы взаимодействия для доступа к функциям в родной C ++ DLL. Я уже использую около 10 различных функций, которые работают.

Теперь я не уверен, как обрабатывать передачу обратного вызова в качестве параметра, чтобы DLL могла вызывать мой код.

Вот прототип функции DLL:

typedef void (WINAPI * lpfnFunc)(const char *arg1, const char *arg2)

И функция, которая позволяет мне передать указанный выше тип:

int WINAPI SetFunc(lpfnFunc f)

Вот мой код C # для определений делегатов и функций:

public delegate void Func(string arg1, string arg2);

public static void MyFunc(string arg1, string arg2)

Вот мой код C # для функции SetFunc Interop:

[DllImport("lib.dll", CharSet = CharSet.Ansi)]
public static extern int SetFunc(Func lpfn);

И, наконец, вот код, в котором я вызываю функцию SetFunc и передаю ей свой обратный вызов:

SetFunc(new Func(MyFunc));

К сожалению, моя функция не вызывается, когда она должна быть. Возвращаемое значение функции SetFunc возвращает код ошибки для успеха, поэтому либо он не вызывает мою функцию, либо не работает, потому что мой код неверен.

22
задан Trevor Elliott 1 November 2011 в 17:11
поделиться