Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从本机C(+;+;)DLL调用.NET(C#)代码?_C#_C++_Dll - Fatal编程技术网

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

如何从本机C(+;+;)DLL调用.NET(C#)代码?,c#,c++,dll,C#,C++,Dll,我有一个C#app.exe和一个C#my.dll。My.DLL.NET项目链接到本地C++ DLL(MyAt.dll)(ExtEngDLL接口),从C++调用到C++ DLL中,没有问题。(通过使用[DllImport(“mynat.dll”,CharSet=CharSet.Unicode,CallingConvention=CallingConvention.Cdecl)]属性。) 我现在需要添加的是C语言的DLL,提供C++代码可以调用的一些回调函数。理想情况下,MyAt.dll C++代码

我有一个C#app.exe和一个C#my.dll。My.DLL.NET项目链接到本地C++ DLL(MyAt.dll)(ExtEngDLL接口),从C++调用到C++ DLL中,没有问题。(通过使用
[DllImport(“mynat.dll”,CharSet=CharSet.Unicode,CallingConvention=CallingConvention.Cdecl)]
属性。)

<>我现在需要添加的是C语言的DLL,提供C++代码可以调用的一些回调函数。理想情况下,MyAt.dll C++代码将使用LoadLibrary(“My.dll”)加载C ^ dll,然后使用GETPROCENT解析它可以调用的回调函数。(注意,在C++代码调用LoadLibrary的时候,My.DLL C ydll DLL已经加载到进程中——这个调用只需要得到一个DLL的句柄) 但是,我不知道从.NET DLL导出“外部C DLL接口”的正确方法是什么


要做到这一点,我需要做些什么?

与流行的观点相反,这是可能的。
请参阅。

尽管非托管导出性的解决方案可能有效,也可能无效,但我们在此处使用了类似的工具(来自不同的来源),并且由于签名可执行文件的问题,我们放弃了这种方法

我们已得出以下结论,并将在将来这样做: 使.NET回调对纯本机模块可用的正确方法是编写一个C++/CLR项目,该项目对.NET程序集进行升级调用并导出本机接口

[ .NET ] -> ----------- -> [ C(++) ]  ... via DllImport Attribute

[ .NET ] <- [ C++/CLR ] <- [ C(++) ]  ... "default" .NET interface + "default" native interface
[.NET]->------------>[C++]。。。通过DllImport属性

[NET]可能的复制品的最初复制我会说它是一个复制品,但是因为它是C++而不是Python,我认为它可以作为一个旗标,所以不要考虑关闭这个。@菲利普:这是个不同的问题。你不是说这应该是一个接近的投票吗?这几乎让我想-1,就因为你反驳了自己,阻止了我的回答,然后在这里发布了完全相同的东西(你自己的答案)。有趣的是,我们成为会员的时间完全相同,而你又多了10万名代表。这不公平;)@兰伯特,你的答案应该是“接近-可能重复”。请注意,你链接到的这个网站并没有真正解释任何东西-它只是提供了一个可执行的+dll(我甚至找不到它的源代码),它“发挥了神奇的作用”。这不是一个令人满意的答案。