从 c# 调用 C++ 代码

Posted

技术标签:

【中文标题】从 c# 调用 C++ 代码【英文标题】:Call C++ code from c# 【发布时间】:2013-07-12 17:39:23 【问题描述】:

我正在 WPF C# (Visual Studio 2008) 中为用 c++ 编写的数学模型实现一个 GUI。我可以在单个 VS 解决方案中完全访问两个项目的源代码

我的问题是:

    是否可以从 C# 调用 C++ 中的方法? 如果是,最好的选择是什么? 我需要在 C++ 中做什么才能“公开”该方法?

我曾尝试“添加参考”,但我认为它不会像这样工作。

【问题讨论】:

它叫做互操作。该术语应该可以帮助您进行 Google 搜索。您可以进行 C 风格的声明互操作,或 COM 对象互操作。这应该可以帮助您入门:msdn.microsoft.com/en-us/library/ms173184.aspx 【参考方案1】:

有多种选择。

最简单的选择通常是使用 C++/CLI 为您需要的 C++ 方法创建一个包装器。然后,您可以从 C# 项目中添加对 C++ DLL 的引用,并正常使用它。

或者,您可以通过 C API 公开所需的 C++ 方法,然后使用 P/Invoke 从 C# 调用它们。

【讨论】:

【参考方案2】:

如果你有一个 C++ 库 (.dll),你可以像这样在 C# 中使用它:

[DllImport("filename.dll")]
public static extern void MethodName(ParameterList);

然后你可以在你的 C# 代码中调用MethodName(...)

【讨论】:

请注意,这需要将 MethodName 导出为 C 样式方法(即:在声明中使用 extern "C"),因此它的名称不会得到 C++ 名称修饰。

以上是关于从 c# 调用 C++ 代码的主要内容,如果未能解决你的问题,请参考以下文章

使用 c# 中的 c++ 引用中的引用从 C# 错误调用 C++ 代码

从 c# 代码调用带有 void *parameter 的本机 c++ 函数

从 C++ 调用 C#

如何编写我的 C++ 函数以便我可以从 C# 调用它?

从 C# 调用 C++ 代码 [重复]

在 WP8 中从 C++ 代码调用 C# 方法