Matlab2013b和VisualStudio 2013混合编程总结
一、 关于软件版本和安装的说明
一般来说,Matlab版本需高于或者等于VisualStudio的版本。综合版本功能和兼容问题,我们选用了Matlab 2013b和Visual Studio 2013。
Matlab2013b能够识别VisualStudio2012版本,前提是Visual Studio2012装在C盘默认目录。如果安装的是2013版本的话,Matlab无法识别,但是可以手动选择路径使得Matlab找到VS的编译器。详细的图文说明在第三部分说明。
二、 系统环境变量的设置
Computer -> Properties -> Advanced system settings ->Environment Variables -> User Variables -> path,添加Matlab2013b的安装路径:
…\MATLAB\extern\lib\win64\microsoft;
…\MATLAB\bin\win64
Computer -> Properties -> Advanced system settings ->Environment Variables -> System Varables -> path,添加路径:
…\MATLAB\runtime\win64;
…\MATLAB\bin;
…\MATLAB\extern\lib\win64\microsoft;
…\MATLAB\bin\win64;
三、 Matlab的设置以及DLL文件的生成
<一>Matlab的设置
在Matlab中设置编译器的时候,经过测试,存在两种情况。分别说明如下:
情况一:
>> mex –setup
>> y
如上所示,Matlab没有找到编译器。此时的问题可能是:1.没有安装SDK,在上面截图中的蓝色的网址中下载SDK并安装;2.没有安装Matlab2013b能识别的VS或者VS没有安装在默认文件夹。
如果是问题1则需要下载安装SDK
如果是问题2的话,则重新输入>>mex –setup然后选择n
如上图所示,Matlab弹出了它所支持的编译器,此时选择[18]或者其他MVC,然后弹出提示后,选择n,自己手动添加路径,添加VS2013的安装路径。
弹出提示后选择y。显示一下界面则是成功了。
接下来输入mbuild -setup,设置方法同mex –setup。
至此,Matlab 编译器设置完毕。
情况二:
只找到了matlab的编译器,没有找到vs的:
那么有两个解决方案,在C盘在安装一遍vs,或者是选择n然后跟情况一的问题2一样操作。最好最顺利的情况是按y有出现vs编译器。
<二>DLL文件的生成
1.首先编写.m文件并保存。
例如myadd2.m:
2.建立DeploymentProject
方法一:在matlab命令窗口输入 >> deploytool 弹出如下界面,选择ApplicationCompiler。
方法二:在Matlab菜单栏选择APPS,选择Application Compiler
选择Application Compiler后出现以下界面:
如图所示进行操作。这里需要注意的是,matPrj是matlab的Project名,同时也是生成的DLL文件名和C#中的命名空间名称,而maMathClass则是命名空间中的类名,MatrixOpera和myadd2则是类中的方法名称。
最终在输出文件夹里找到几个关键文件:
主要是DLL文件。在Matlab的安装目录下:
…\MATLAB\toolbox\dotnetbuilder\bin\win64\v2.0中找到MWArray.dll,然后将MWArray.dll和prj.dll拷到C#的工程中的Debug文件夹中。
四、 Visual Studio的设置以及C#调用DLL文件
Matlab和C#混合编程的时候,VS不需要特殊的设置,Matlab和C++混合编程的时候VS设置比较麻烦,这个在后面再做说明。以下讲C#的设置。
在VS2013中建立C#窗体应用程序
建立完之后需要往工程里面添加引用。
如上,在引用那里右键添加引用,然后点击浏览找到MWArray.dll和prj.dll并添加,结果如图所示,点击确定退出。
在需要使用prj中的函数的文件里面添加如下命名空间说明:
using MathWorks.MATLAB.NET.Arrays;
using MathWorks.MATLAB.NET.Utility;
using matPrj;
为了简单的测试,可如下操作: