是可以从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#客户端教程