是否可以从VS C++中的C#DLL导出函数?

Mik*_*ebb 29 c# c++ notepad++ dllexport

在VS C/C++中你可以使用extern "C" __declspec(dllexport) -function declaration-.

如何在C#dll中完成此操作?C#代码是否与上面的代码相同?

编辑:更多信息

我正在尝试为Notepad ++创建一个插件,我想使用C#,但到目前为止我看到的常见方法是使用传统的C++代码和上面的调用来导出Notepad ++期望导入的一些函数和呼叫.有一个使用C#的示例应用程序,但这仍然需要一个加载器DLL,我从下面的评论/答案中假设是C#的唯一方法.

hB0*_*hB0 31

非托管出口
https://sites.google.com/site/robertgiesecke/Home/uploads/unmanagedexports

它是如何工作的?

创建一个新的类库或继续使用现有的类库.然后添加UnmanagedExports Nuget包.

这几乎是所有需要的设置.

现在,您可以编写任何类型的静态方法,[DllExport]使用本机代码进行装饰并使用它.
它的工作方式与DllImport类似,因此您可以使用自定义参数/结果的编组MarshalAsAttribute.

在编译期间,我的任务将修改IL以添加所需的导出...

  • DllExports项目现在位于[GitHub](https://github.com/3F/DllExport)上。 (2认同)

Ben*_*igt 19

我以前见过人们这样做,但它需要ildasm,添加MSIL .export指令,然后重新组装. 名为的程序dll_tool可以为您执行这些步骤.

如果要构建具有本机和托管导出的混合模式DLL,则应使用专门为此目的而设计的C++/CLI.


Pat*_*ite 8

是的,可以从C#dll导出函数,就像C++一样!您需要一些辅助非托管导出(DllExport for .Net)的帮助来促进此过程,或者从类似的方法(如将C#/ VB.NET中的函数导出为本机代码).

有关使用Robert Giesecke的C#非模板化导出模板将C#dll导出到与C++有很多相似之处的遗留应用程序(Metatrader),请参阅将C#DLL导出到Metatrader Build 600+的代码.

此外,您可能会发现Native和.NET Interopability很有趣,尽管它主要用于从.NET中访问本机代码而不是相反.