记录下matlab编译dll,然后再C#中调用
- 首先是在matlab中编写好需要编译的函数,我用的matlab2014b,各个版本之间的使用方法应该差别不大。
写好函数后在命令行输入deploytool,会弹出一个窗口,各版本matlab的选项有差异,选择Library Compiler,在编译器窗口选择编译.NET Assembly,然后添加需要编译的m文件,命名空间和类名,函数名之类的可以自定义,也可以用默认的名称。
设置好后点击Package就会在当前的工作目录下生成一个文件夹,打开后又有几个文件夹,其中后缀为files_only的文件夹里面就包含我们需要使用的dll文件。
然后在C#工程中,在解决方案-引用里面填在dll文件的引用,以及MWArray.dll的引用,MWArray.dll在matlab的安装目录下能够找到。然后在程序中添加命名空间的引用,除了我们要使用的dll的命名空间外,还包括MathWorks.MATLAB.NET.Arrays和MathWorks.MATLAB.NET.Utility,因为matlab的数据类型都是MWArray,在向matlab函数传参数时要将C#中的变量类型强制转换成MWArray,然后就能愉快的调用matlab函数啦。
using DrawingFunc;
using MathWorks.MATLAB.NET.Arrays;
using MathWorks.MATLAB.NET.Utility;
int[] list_m = Point_list_X.ToArray();
int[] list_n = Point_list_Y.ToArray();
int[] list_data = Data_list.ToArray();
MWArray m = (MWNumericArray)list_m;
MWArray n = (MWNumericArray)list_n;
MWArray filenames = (MWNumericArray)list_data;
MWArray color = (MWNumericArray)new double[3] { 0.5, 0.5, 0.5 };
MWArray fp = (MWArray)filepath;
MWArray IMG = (MWArray)BGI;
DrawingFunc.Class1 t = new DrawingFunc.Class1();
t.DrawingFunction(IMG, fp, filenames, color, m, n);