【问题标题】:Exporting functions from a C# class library从 C# 类库中导出函数
【发布时间】:2010-03-11 13:27:37
【问题描述】:

如何导出 C# 类库中定义的函数,同时将它们导入非托管 C++ 应用程序/DLL 并从中调用它们?

【问题讨论】:

    标签: c# c++ dll export


    【解决方案1】:

    严格来说,您不能像在经典 .dll 中那样只导出函数,因为 .NET .dll 根本不是真正的 .dll。您仅有的三个选项是:

    1. 使用托管 C++
    2. 将 C# 类公开为 COM 对象并从 C++ 代码中使用它们
    3. Host the .NET runtime in your C++ project 并通过它与您的 C# 类进行交互。

    【讨论】:

      【解决方案2】:

      您的 C++ 应用程序必须从托管 CLR 开始。 .NET DLL 没有什么特殊要求。

      【讨论】:

        【解决方案3】:

        你不会的。不支持。您几乎只能从 C# 类库中导出 COM 对象。

        【讨论】:

        • +1 - COM 互操作是一种相当标准的技术,用于从非托管应用程序调用托管代码。
        【解决方案4】:

        您还可以为您的 C# 库创建一个 C++ 包装器 - 一个简单的托管 C++ DLL,它可以导入 .NET 方法并以本机方式导出它们。这增加了一个额外的层,但如果 C# 库是必须的,它可能会很有用。

        另一个选项是调整已编译的程序集以导出函数。 C# 编译器无法做到这一点,但需要稍微更改 MSIL 代码才能完成这些工作。 看看this article - 有一些关于这些东西如何工作的链接,以及一个自动化它的工具(虽然我自己没有尝试过)。

        【讨论】:

        • C# 库不是必需的 - 事实上,我正在考虑改用托管 C++。我不能将 CLI 与我的主应用程序一起使用,但我可以使用它来编写我的库。这将如何改变情况?
        • 在这种情况下,您应该使用托管 C++ - 只是为了避免不必要的黑客攻击。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-03-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-10
        • 1970-01-01
        相关资源
        最近更新 更多