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

时间:2011-01-27 16:16:53

标签: c# c++ notepad++ dllexport

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

如何在C#dll中完成此操作?是否有与上述代码等效的C#代码?

修改:更多信息

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

4 个答案:

答案 0 :(得分:28)

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

DLLExport => https://github.com/3F/DllExport

  

它是如何运作的?

     

创建新的类库或继续使用现有的类库。   然后添加UnmanagedExports Nuget package

     

这几乎是所有必需的设置。

     

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

     

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

答案 1 :(得分:18)

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

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

答案 2 :(得分:7)

是的,可以用C#dll导出函数,就像C ++一样!您需要一个便于此过程的加载项Unmanaged Exports (DllExport for .Net)的帮助,或者来自Exporting functions in C#/VB.NET to native code等类似方法的帮助。

请参阅Code to Export C# DLL to Metatrader Build 600+,了解使用Robert Giesecke的C#非模板导出项目模板将C#dll导出到与C ++有很大相似性的遗留应用程序(Metatrader)的工作示例。< / p>

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

答案 3 :(得分:2)

不,你不能像在C和C ++中那样做。

但是你可以创建COM API来实现那些可以在C和C ++代码中使用的API。

参见这些文章