Obecnie próbuję wywołać funkcję z biblioteki DLL C# z niezarządzanej aplikacji C++.Reverse PInvoke z natywnego C++
Po wyszukiwaniu godzin w Internecie i SO, znalazłem, że mam kilka opcji.
Mogę użyć COM, DllExport
lub użyć odwrotnego wywołania PInvoke z delegatami. Ostatnia brzmiała dla mnie najlepiej, więc po wyszukaniu SO skończyło mi się here.
Stwierdza, że artykuł pokazuje, jak korzystać z odwrotnego wywołania, ale wygląda na to, że kod C# musi najpierw zaimportować bibliotekę C++, zanim będzie można go użyć.
Potrzebuję móc używać C++ do wywoływania moich funkcji C# Dll bez uruchamiania aplikacji C#.
Może to odwrotne PInvoke nie jest sposobem, aby to zrobić, ale jestem dość niedoświadczony, jeśli chodzi o rzeczy o niskim poziomie, więc wszelkie wskazówki i wskazówki, jak to zrobić byłoby świetnie.
Kod w linku jest
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);
}
}
Najprościej UnmanagedExports: https://sites.google.com/site/robertgiesecke/Home/uploads/unmanagedexports –
Jeśli to, co chcesz zrobić, to zorganizować dll C# od C++, nie wyglądasz [ tutaj] [1]? [1]: http://stackoverflow.com/questions/3799907/using-c-sharp-dll-in-project-c – plinth