首先我们想要使用matlab,肯定是想要进行科学计算,比如使用matlab里的函数库处理数据。
我这里的版本是matlab2016a,其他版本也可以,主要是版本太旧的话,里面可能就没有你想要的函数。
最重要的提示:所有的路径不要中文,不要中文,不要中文!!!
其次你肯定要写好matlab的代码,用于封装成DLL
PS:一定要在matlab里运行试一试,看看是否真的好用,至少也要能有返回值
接下来就是导出成DLL(看了太多攻略,人都要麻了)
点击【应用程序】
继续点击最右侧箭头显示更多
找到这个
选择:
进去之后选择【.NET Assembly】:
点击+号,将你的.m文件包括的函数放入其中
这里要注意:如果你是绿色版就没办法添加成功,安心的安装和破解
在这里修改类名:非必须
最后一步:点击右上角的绿色对勾,在弹出的窗口选择部署的地方就可以。
到此为止,简单的部署完成了,但是还没完事,接下来是踩坑环节
你肯定不可能只在自己的电脑运行,所以你需要拿好一些东西,用于打包。
如果别人的电脑没有matlab或者和你的版本不一样,你就需要加上打包一个运行时
1.在当前路径下找到一个名叫MWArray.DLL的文件(这个是为了C#和matlab变量之间转换用的)
不一定是2.0,根据你的matlab版本
接着打开刚才的输出目录,找不到的话可以打开你的matlab工程里看下:
把这两个DLL和上面那个DLL,一共三个DLL,放进你的项目文件里,建立一个lib文件夹放进去,然后在你的C#项目里引用这三个DLL
现在你就可以用C#进行开发了,但是还有坑:
如果你用VS开发:
右键项目属性:
属性中选择生成,然后去掉:首选32位
这一步骤的原因主要是为了适配你的matlab版本,如果你的matlab是64位,那么首选32位肯定报错。
你当然也可以:
把这个anyCPU换成x64(对应你的版本)
我估计现在没人32位开发C#软件,前一种方式基本OK
然后你就发现你可以使用DLL里的方法了
但是使用起来有个小问题,就是第一次使用的时候可能是因为启动服务或者怎么事的,有点卡,你可以在界面生成前,跑一个线程,调用一下这个方法,就不会让主线程卡死,下下策。
最后一个问题就是你如何来转换变量,我提供简单的思路,因为我也没用太多次。
我用了点linq,蛮好用的
上面这个例子就是把一个C#的数组变成matlab能识别的变量,然后放入你DLL的方法里当成传参,然后用aa这个对象来接收方法的返回值。
最后来讲运行时:
找到这个路径
把这个路径下的exe打包给没有matlab或者和你的开发版本不一致的电脑上,安装一下。
搞定!