【问题标题】:What are my options for C++ DLL to call a C# DLL?C++ DLL 调用 C# DLL 的选项有哪些?
【发布时间】:2010-11-01 13:56:37
【问题描述】:

我有一个 C++ DLL,它需要在 C# 类库中调用一个函数(传递一个值,返回一个值)。

我唯一的选择是给 C# DLL 一个 COM 接口并使用 IDispatch 从 C++ 调用它吗?

这是最好的方法吗?

【问题讨论】:

  • 有什么方法可以使用托管 C++ 并完全避免使用 COM?
  • 这是 C# 应用还是 C++ 应用?
  • 想知道 JonSkeet 对此有什么要说的... :-)
  • 它是一个调用 C# DLL 的 C++ DLL。 C++ 被另一个应用程序使用。我无法更改与 C++ DLL 的接口(因此,围绕它的托管 C++ 包装器是不可能的)。

标签: c# c++ dll interop idispatch


【解决方案1】:

这里有几个可供您选择的选项

  1. 使用混合模式 C++/CLI 程序集作为 C++ 和 C# DLL 之间的桥梁
  2. 通过将几个关键的 C# 类型公开为 COM 对象来使用 COM 桥。然后可以通过普通 COM 语义通过 C++ 代码访问它

【讨论】:

    【解决方案2】:

    This project 为类中的静态方法创建 dll 导出。然后,您可以从非托管代码中调用 C# 静态方法。

    【讨论】:

      【解决方案3】:

      一种可行的方法是通过 COM 调用它。您可以使用the Regasm tool 创建 COM 包装器。

      【讨论】:

        【解决方案4】:

        这不是 only 选项。

        您还可以将 C++ DLL 编译为托管 DLL。

        您可以将 C# DLL 作为服务托管并远程访问它。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-04-15
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多