在VS C / C ++中,您可以使用extern "C" __declspec(dllexport) -function declaration-
。
如何在C#dll中完成此操作?是否有与上述代码等效的C#代码?
修改:更多信息
我正在尝试为Notepad ++创建一个加入,我想使用C#,但到目前为止我看到的常见方法是使用传统的C ++代码和上面的调用来导出Notepad ++期望的一些函数导入和调用。有一个使用C#的示例应用程序,但这仍然需要一个加载器DLL,我从下面的评论/答案中假设是C#的唯一方法。
答案 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。
参见这些文章