从生成的c代码创建dll库

时间:2013-12-02 15:17:59

标签: c# c matlab dll pinvoke

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

我现在想在我的C#Windows Forms程序中使用此功能。要在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 个答案:

答案 0 :(得分:0)

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

  1. 将C代码编译为DLL,并使用p / invoke包含它。
  2. 将C代码编译为C ++ / CLI混合模式程序集,将功能包装在ref类中,并使用C#
  3. 使用COM服务器包装C代码并使用C#。
  4. 将代码保留在MATLAB中并使用C#中的代码。 C#代码可以通过多种方式使用MATLAB代码。
  5. 我确信除此之外还有其他选择。

    现在,如果您希望详细了解下一步该做什么的详细说明,我很抱歉让您失望。你问了一个广泛的问题,我已经给你一个相应的答案。接下来你应该做的是选择上面的一个选项,并实现它。遇到困难时,请随时提出更具体的问题。