目前我正在试图从非托管C ++应用程序调用从C#DLL函数。
搜索网络等等小时后,我发现我有几种选择。
我可以使用COM, DllExport
,或使用反向PInvoke的与代表。 最后响起最吸引我的,所以SO搜索后,我结束了在这里 。
它指出,文章介绍了如何使用反向PInvoke的,但它看起来像C#代码必须先导入C ++ DLL,然后才能使用它。
我需要能够使用C ++调用我的C#DLL函数,而无需首先运行一个C#应用程序。
也许逆转的PInvoke是不这样做的方式,但我很没有经验,当涉及到低层次的东西,所以就如何做到这一点的任何指针或建议将是巨大的。
在链接的代码
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);
}
}