【问题标题】:Is is possible to export functions from a C# DLL like in VS C++?是否可以像在 VS C++ 中一样从 C# DLL 导出函数?
【发布时间】:2011-06-16 16:09:03
【问题描述】:

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

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

编辑:更多信息

我正在尝试为 Notepad++ 创建一个插件并且我想使用 C#,但到目前为止我看到的常见方法是使用带有上述调用的旧版 C++ 代码来导出 Notepad++ 期望的一些函数导入和调用。有一个使用 C# 的示例应用程序,但这仍然需要一个加载程序 DLL,我认为下面的 cmets/answers 是 C# 的唯一方法。

【问题讨论】:

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


    【解决方案1】:

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

    但是您可以创建 COM API 来实现您可以在 C 和 C++ 代码中使用的功能。

    查看这些文章

    【讨论】:

      【解决方案2】:

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

      如果您想构建包含本机和托管导出的混合模式 DLL,您应该使用专门为此目的设计的 C++/CLI。

      【讨论】:

      • 你有一个小的 github 演示项目来支持这个,或者知道一些吗?
      【解决方案3】:

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

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

      它是如何工作的?

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

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

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

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

      【讨论】:

      • DllExports 项目现在位于GitHub
      【解决方案4】:

      是的,可以像 C++ 一样从 C# dll 中导出函数!您需要来自促进此过程的加载项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) 的工作示例。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-16
        • 2012-09-06
        • 1970-01-01
        • 2016-05-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多