如何从本机C(++)DLL调用.NET(C#)代码?

我有一个C#app.exe和一个C#my.dll。 my.dll .NET项目链接到本机C ++ DLL(mynat.dll)(外部C DLL接口),从C#调用C ++ DLL工作没有问题。 (通过使用[DllImport("mynat.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]属性。)

我现在需要添加的是C#dll提供一些C ++代码可以调用的回调函数。 理想情况下,mynat.dll C ++代码将使用LoadLibrary(“my.dll”)加载C#dll,然后使用GetProcAddress解析它随后可以调用的回调函数。 (注意,在C ++代码调用LoadLibrary时,my.dll C#dll已经加载到进程中 – 这个调用只是为了获取dll的句柄。)

但是,我不知道从.NET DLL导出“extern C DLL接口”的正确方法是什么

我需要做些什么来实现这一目标?

与流行的看法相反,这可能的。
看到这里 。

虽然SLaks提供给Unmanaged Exportsutility的链接可能会或可能不会起作用,但我们在这里使用了类似的工具(来自不同的来源),并且由于签名的可执行文件的问题已经放弃了这种方法。

我们已经得出以下结论,将来会做到这一点:

使.NET回调可用于纯本机模块的正确方法是编写一个C ++ / CLR项目,该项目执行upcalls到.NET程序集并导出本机接口。

 [ .NET ] -> ----------- -> [ C(++) ] ... via DllImport Attribute [ .NET ] <- [ C++/CLR ] <- [ C(++) ] ... "default" .NET interface + "default" native interface