Passando uma função de retorno de chamada em C # através da Interop / pinvoke

Estou escrevendo um aplicativo C # que usa serviços de interoperabilidade para acessar funções em uma DLL C ++ nativa. Eu já estou usando cerca de 10 funções diferentes que estão funcionando.

gora, não sei como lidar com a passagem de um retorno de chamada como um parâmetro, para que a DLL possa chamar meu códig

Aqui está o protótipo de função da DLL:

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

E a função que me permite passar o tipo acima:

int WINAPI SetFunc(lpfnFunc f)

Aqui está meu código C # para as definições de delegado e função:

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

public static void MyFunc(string arg1, string arg2)

Aqui está meu código C # para a função de interoperabilidade SetFunc:

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

E finalmente, aqui está o código no qual eu chamo a função SetFunc e passo meu retorno de chamada:

SetFunc(new Func(MyFunc));

Infelizmente, minha função não está sendo chamada quando deveria. O valor de retorno da função SetFunc está retornando o código de erro para um Sucesso; portanto, ele não está chamando minha função ou não está funcionando porque meu código está errad

questionAnswers(2)

yourAnswerToTheQuestion