是可以从C#DLL导出函数,如在VS C ++中?
在VS C / C ++中,你可以使用extern "C" __declspec(dllexport) -function declaration-
。
我如何在C#DLL中完成这个工作? 是否有相当于上面的代码的C#代码?
编辑:更多信息
我正在尝试为Notepad ++创build一个添加项,我想使用C#,但是迄今为止我看到的常见方法是使用上述调用的传统C ++代码导出Notepad ++期望导入的一些函数,呼叫。 有一个使用C#的示例应用程序,但是这仍然需要一个加载器DLL,我从下面的评论/回答中假设是C#的唯一方法。
非托pipe的出口
https://sites.google.com/site/robertgiesecke/Home/uploads/unmanagedexports
它是如何工作的?
创build一个新的类库或继续现有的类库。 然后添加UnmanagedExports的Nuget包 。
这几乎是所有需要的设置。
现在你可以编写任何types的静态方法,用
[DllExport]
装饰它,并从本地代码中使用它。
它和DllImport一样工作,所以你可以用MarshalAsAttribute
自定义参数/结果的编组。在编译期间,我的任务将修改IL以添加所需的导出…
我曾经见过人们这样做,但它需要ildasm,添加MSIL。 .export
指令,然后重新组装。 一个名为dll_tool
的程序可以为你做这些步骤。
如果要使用本地和托pipe导出来构build混合模式DLL,则应该使用专门为此目的而devise的C ++ / CLI。
是的,可以像C ++那样从C#dll中导出函数。 你需要一个帮助这个过程的插件Unmanaged Exports(DllExport for .Net) ,或者从一个类似的方法,比如将C#/ VB.NET中的函数导出到本地代码 。
请参阅将C#DLL导出到Metatrader Build 600+的代码,以便使用Robert Giesecke的非托pipe导出的C#项目模板将C#dll导出到与C ++具有很大相似性的旧应用程序(Metatrader)。
另外,你可能会发现Native和.NET Interopability有趣,尽pipe它主要是从.NET内部访问本地代码,而不是其他方式。
不,你不能像C和C ++那样做。
但是您可以创buildCOM API来实现可以在C和C ++代码中使用的API。
看到这些文章
- C#类作为COM对象
- 从非托pipeC ++代码调用托pipe的.NET C#COM对象
- COM Interop第1部分:C#客户端教程