2011-05-05 138 views
11

我开发了一个MATLAB函数,并且正在寻找一种方法从另一个C#应用程序中调用该函数,并将一些参数传递给它,并在C#程序中获得结果。从C调用MATLAB函数#

听说我可以使用Dynamic Data Exchange(DDE)或COM对象,但我可以做到吗?

+1

您是否尝试阅读C#文档中的PInvoke属性?它会给你一个从.NET World调用COM对象的想法。 – kanchirk 2011-05-05 17:30:41

+0

您可以将matlab函数句柄传递给C#委托。看到我的类似帖子:http://stackoverflow.com/questions/31408624/passing-matlab-methods-as-delegates-to-net-object – CodyF 2015-08-06 14:50:14

回答

20

MATLAB Central中有一个很好的例子。

它显示了如何与MATLAB沟通方式有三种:

  1. COM
  2. MATLAB .NET Bulider
  3. MATLAB编译器

COM(我没有任何经验与它)

缺点:M ATLAB需要安装在目标计算机上。

MATLAB .NET构建器将您的MATLAB代码编译为.NET程序集,您可以直接使用它。

优点:不需要MATLAB要在目标计算机上安装

缺点:它是昂贵的

MATLAB编译器编译您的MATLAB代码为C/C++库或EXE文件。您可以通过P/Invoke使用它。

优点:不需要MATLAB要在目标计算机上安装

缺点:它是昂贵的,大量的P/Invoke的。

+0

你应该指出,对于第二个和第三个选项,生成的二进制文件需要[MCR](http://www.mathworks.com/products/compiler/mcr/)安装在目标机器上(MCR可免费使用) – Amro 2013-06-12 14:27:44

+2

链接现已停用:-( – 2014-08-13 08:03:58

5

还有第三个选项:delegates。启动MATLAB - >加载.NET程序集 - >使用MATLAB函数的委托句柄执行.NET函数。

2

有一个很好的例子 on this site设置一切。您可以使用MATLAB .NET部署工具。

您需要

  • 安装MCR(MATLAB编译器运行时)。
  • 使用Matlab Deploy 工具将您的Matlab函数部署到.NET Assembly。这将创建一个.dll文件。
  • 在.NET项目中添加.dll引用。
  • 添加对MATLAB.NET的引用。

这种方法的优点是目标机器不需要安装MATLAB,但是在下行方面执行起来非常昂贵。