PInvoke reverso do C ++ nativo
No momento, estou tentando chamar uma função de uma DLL C # de um aplicativo C ++ não gerenciado.
Depois de pesquisar por horas na web e SO, descobri que tenho algumas opções.
Posso usar COMDllExport
, ou use reverso PInvoke com delegados. O último soou mais atraente para mim, então depois de pesquisar SO acabeiAqui.
Ele afirma que o artigo mostra como usar reverso PInvoke, mas parece que o código C # tem que primeiro importar o C ++ Dll, antes que ele possa ser usado.
Eu preciso ser capaz de usar o C ++ para chamar minhas funções C # Dll, sem executar um aplicativo C # primeiro.
Talvez inverter PInvoke não é a maneira de fazê-lo, mas eu sou bastante inexperiente quando se trata de coisas de baixo nível, então qualquer ponteiros ou dicas sobre como fazer isso seria ótimo.
O código no link é
C #
using System.Runtime.InteropServices;
public class foo
{
public delegate void callback(string str);
public static void callee(string str)
{
System.Console.WriteLine("Managed: " +str);
}
public static int Main()
{
caller("Hello World!", 10, new callback(foo.callee));
return 0;
}
[DllImport("nat.dll",CallingConvention=CallingConvention.StdCall)]
public static extern void caller(string str, int count, callback call);
}
C ++
#include <stdio.h>
#include <string.h>
typedef void (__stdcall *callback)(wchar_t * str);
extern "C" __declspec(dllexport) void __stdcall caller(wchar_t * input, int count, callback call)
{
for(int i = 0; i < count; i++)
{
call(input);
}
}