关于C#与Matlab的混合编程,我在网上看了很多教程,按他们的步骤进行,总会遇到各种各样的问题不能解决,最终以失败而告终。经过自己两天的努力,看了诸多文献,终于成功了,故把自己确信能成功的方法分享给大家。当然在编写不同功能的函数会遇到其它千奇百怪的问题,因此我不能保证按我的方法在任何环境下都能成功。本文只是一个简单的例子,遇到的问题相对较少,更复杂的问题或更诡异的出错只能请教其他大神了。

本文所用的编程平台为Visual Studio 2010,Matlab版本为MATLAB R2012a,这是最后一版经典界面的Matlab。

一、编写Matlab函数文件

此部分不多说,学过Matlab的都懂。

例子为一个已知半径R计算圆周长的函数zhouchang()。

二、编译函数文件为DLL

在Matlab命令行下运行deploytool,在图形界面里选.net组件,然后进入一个工程目录的界面,新建工程,工程的名字就是.net组件的名字,在其下面的目录表示.net类名,在类名上点右键”Add File…“,把Matlab的.m函数文件选进去。

最后进行编译(Build the project),生成的目录下有以工程名命名并加Native的dll文件。

过程可能较久,耐心。如果出错,看提示是什么出错,网上搜索相关资料修改。

三、在C#中调用

建立一个C#工程并引用MWArray.dll和刚生成的zhouchangNative.dll。

我的MWArray.dll在:..MATLABR2012atoolboxdotnetbuilderbinwin64v2.0MWArray.dll

添加声明: using MathWorks.MATLAB.NET.Arrays; //数据交换必需 using MathWorks.MATLAB.NET.Utility; //如果要用到画图功能才添加 using zhouchangNative; // 引用的DLL文件名

编写代码:

编译运行后可能会有如下出错:

需要进行如下设置:

编译运行:

大功告成!