Odwróć PInvoke z natywnego C ++
Obecnie próbuję wywołać funkcję z biblioteki DLL C # z niezarządzanej aplikacji C ++.
Po szukaniu godzin w sieci i SO znalazłem kilka opcji.
Mogę użyć COM,DllExport
lub użyj odwrotnego PInvoke z delegatami. Ten ostatni brzmiał dla mnie najbardziej pociągająco, więc po przeszukaniu Skończyłemtutaj.
Stwierdza, że artykuł pokazuje, jak używać odwrotnego PInvoke, ale wygląda na to, że kod C # musi najpierw zaimportować bibliotekę C ++ Dll, zanim będzie można go użyć.
Muszę być w stanie użyć C ++ do wywołania moich funkcji C # Dll, bez uruchamiania aplikacji C # w pierwszej kolejności.
Może odwrotny PInvoke nie jest sposobem na to, ale jestem dość niedoświadczony, jeśli chodzi o rzeczy niskiego poziomu, więc wszelkie wskazówki i wskazówki, jak to zrobić, byłyby świetne.
Kod w linku to
DO#
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);
}
}