如何从本机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
- 带有IN语句的Oracle参数?
- MVC 3在ValidationSummary中显示HTML
- 正确的SqlParameter语法
- entity framework6 + C#传递一个combobox.SelectedValue作为context.CreateQuery的参数,我想念的东西很简单?
- 什么是C ++的std :: bitset的C#等价物
- 在javascript中模拟类似C#的事件
- 使用three.js加载.obj时出现问题
- 通过pInvoke在C#中IMetroMode :: IsLauncherVisible?
- 如何在Windows Phone 8应用程序中解压缩IsolatedStorage中的文件?