PInvoke von nativem C ++ umkehren
Ich versuche derzeit, eine Funktion aus einer C # -DLL aus einer nicht verwalteten C ++ - App aufzurufen.
Nachdem ich stundenlang im Internet und auf SO gesucht hatte, stellte ich fest, dass ich einige Optionen hatte.
Ich kann COM verwenden,DllExport
Oder verwenden Sie Reverse-PInvoke für Stellvertreter. Das Letzte klang für mich am ansprechendsten, also bin ich, nachdem ich SO gesucht habe, zum Schluss gekommenHier.
Es wird angegeben, dass der Artikel die Verwendung von Reverse-PInvoke zeigt, aber es sieht so aus, als müsse der C # -Code zuerst die C ++ - DLL importieren, bevor er verwendet werden kann.
Ich muss C ++ verwenden können, um meine C # -Dll-Funktionen aufzurufen, ohne zuerst eine C # -Anwendung auszuführen.
Vielleicht ist das Umkehren von PInvoke nicht der richtige Weg, aber ich bin ziemlich unerfahren, wenn es um Low-Level-Sachen geht, also sind alle Hinweise oder Tipps, wie man das macht, großartig.
Der Code im Link ist
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);
}
}