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