c# - 从生成的 C 代码创建 dll 库

标签 c# c matlab dll pinvoke

我有一个控制问题,我使用模型预测控制 (MPC) 解决了这个问题。我已经在 MATLAB 中陈述了问题并使用了 FORCES http://forces.ethz.ch/解决它。 FORCES 是 ETH Zürich 的一项 Web 服务,可生成无库的 ANSI-C 代码。为了测试代码,他们提供了一个脚本来将 c 代码编译为 MATLAB .mex 文件。这一切都很好。

我现在想在我的 C# Windows 窗体程序中使用这个函数。要在 C# 中使用 C 代码,我必须将 C 代码编译为 dll,然后使用 P/Invoke?或者还有其他方法吗?我该如何编译它?我可以按原样使用代码还是必须对其进行编辑(添加 __declspec 或类似的东西)?是否可以直接从 MATLAB 编译 dll?

.c 和.h 文件可以在我的主页上找到:http://n.ethz.ch/~rehofman/download/ .

我运行 64 位 Windows 7、MATLAB 2013b、Visual Studio 2012。

如果需要,我已经安装了 MinGW。

编辑:

好的,这是一个更具体的问题:我有一个用 c 代码编写的函数 (myMPC_solve),我想从 c# 调用它。最好的方法是什么?参数和数据类型都在 .h 文件中。

最佳答案

您可以执行以下任一操作:

  1. 将 C 代码编译为 DLL,并使用 p/invoke 将其包含在内。
  2. 将 C 代码编译成 C++/CLI 混合模式程序集,将功能包装在 ref 类中,并从 C# 中使用它
  3. 用 COM 服务器包装 C 代码并从 C# 使用它。
  4. 将代码留在 MATLAB 中并使用 C# 中的代码。 C# 代码可以通过多种方式使用 MATLAB 代码。

而且我确信除了上述之外还有其他选择。

现在,如果您希望获得有关下一步操作的详 segmentation 步说明,很抱歉让您失望了。你问了一个宽泛的问题,我已经给了你一个相应宽泛的答案。接下来您应该做的是选择上述选项之一并实现它。当您遇到困难时,请随时提出更具体的问题。

关于c# - 从生成的 C 代码创建 dll 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20331644/

相关文章:

c# - 如何在不更改方法签名的情况下返回测试替身?

c# - (UWP) 使用 ESC 键关闭 ModalDialog

c# - 如何确定 C# 编译器的路径?

c# - 如果我在一个应用程序中有多个表单,我该如何在它们之间顺利过渡?

c++ - 在 OpenMP for 循环中调用函数

c++ - "reserved for any use"是什么意思?

c - 启动时的应用程序名称以彩色文本和控制台中的正确模式

c - MexFile 导致 "Assertion detected"错误 - mexfiles 中的 memcpy 有问题吗?

matlab - R2014a 或更高版本的 Simulink 中嵌入式 matlab 函数中的图形对象句柄数组

matlab - 转义序列以在 MATLAB 中显示撇号