手把手教你学VS 2010调用MATLAB函数
VS 2010 调用 matlab 2010 自定义函数
最近在网上查找相关 VS2010 调用 matlab2010 的函数,实在是太少了。在此抛砖引玉了,把
自己的学习过程和大家分享一下吧。
这里使用的方法是先将 matlab 的 xx.m 文件编译为动态库,然后在 VS 中以静态的方式链接到
动态库文件(当让,动态估计也是可以的,可以试下哦!)。假设你的机子已经安装了 VS2010 和
matlab2010,并且之前没有做过任何设置。下边讲一下从头到尾的操作过程吧:
1. 配置 matlab 编译环境
a) 设置环境变量。
编译.m 文件需要使用 VC 编译器,使用编译器前需要先在 matlab 中对其进行设置。在我的电
脑图标上点击右键-系统属性,弹出如下对话框:
点击“环境变量”按钮,出现下页的对话框。点击系统变量下得新建按钮,弹出“编辑系统变
量对话框”,假设 VS 装在 D 盘,变量名随便取一个,变量值设置为“D:\Program Files\Microsoft Visual
手把手教你学VS 2010调用MATLAB函数
Studio 10.0\VC\bin”(以实际的编译器位置为准哦!)。完成后点击确定。
b) 选择 VC 编译器
打开 matlab。在命令行中输入“mbuild –setup”,输入过程如下,需要输入的选项已经用蓝色
标出了:
>> mbuild -setup
Please choose your compiler for building standalone MATLAB applications:
Would you like mbuild to locate installed compilers [y]/n? n
Select a compiler:
[1] Lcc-win32 C 2.4.1
[2] Microsoft Visual C++ 6.0
[3] Microsoft Visual C++ 2005 SP1
[4] Microsoft Visual C++ 2008 Express
[5] Microsoft Visual C++ 2008 SP1
[0] None
Compiler: 5
The default location for Microsoft Visual C++ 2008 SP1 compilers is C:\Program
手把手教你学VS 2010调用MATLAB函数
Files\Microsoft Visual Studio 9.0,
but that directory does not exist on this machine.
Use C:\Program Files\Microsoft Visual Studio 9.0 anyway [y]/n? n
Please enter the location of your compiler: [C:\Program Files\Microsoft Visual Studio 9.0]
D:\Program Files\Microsoft Visual Studio 10.0\VC\bin
2. .m 文件编译示例
准备好.m 源文件,文件名“add.m”如下,没来得急改名字,其实实现的是画正弦曲线的功能。
% file name: add.m
function add(x)
% UNTITLED Summary of this function goes here
% Detailed explanation goes here
t=0:0.001:x;
y=sin(2*pi*50*t);
plot(t,y);
end
在 matlab 命令行中输入 deploytool 命令,弹出对话框,填写内容如下:
点击 ok 后,出现下面的界面。点击 Add files 将 add.m 添加入工程中。
手把手教你学VS 2010调用MATLAB函数
点击 按钮,然后我们需要的动态库生成了。在任意一个文件上点击右键,选择Locate on Disk,
就可以找到生成的文件了。这几个文件就是需要在 VS 里边用的文件,具体怎么用看下边吧。
3. 配置 VS 的目录选项
建立一个新项目,然后对项目的文件路径进行设置见下。如果不建立新工程,看不到项目属
性菜单项。
A) 在项目属性对话框中填写包含目录见下表。我的 MATLAB 装在 D 盘,所以盘符为 D,记
住需要根据实际安装位置填写。其中第三个目录“D:\我的文档\MATLAB\test\distrib”是编译生成
test.h,test.lib 和 test.dll 的目录。可以将 test.h 和 test.lib 拷贝到 VS 工程目录中,就不需要添加这
个包含目录了。Test.dll 文件是动态库文件,必须拷贝到工程生成 exe 文件的目录。
手把手教你学VS 2010调用MATLAB函数
B)库文件目录设置。这个目录是需要加载库文件的目录也是从 MATLAB 安装目录下边选择的。
因为刚开始搞不清楚都需要哪些,所以加的有点多。更准确的设置,还没搞清楚,大家将就着点吧。
反正现在的设置也是可用的,以后自己研究吧。记住要按照自己机器上安装 matlab 的路径进行设置,
不要搞错了。
4. 动态库调用示例
新建一个工程,工程名:test,建立一个基于对话框的程序。对话框上加一个按钮,取名“plot”。
在 testmtDlg.cpp 文件中加入如下标灰色背景的代码。
#include "stdafx.h"
#include "testmt.h"
#include "testmtDlg.h"
#include "afxdialogex.h"
#include "test.h"
//#pragma comment(lib,"libmx.lib")
//#pragma comment(lib,"libmat.lib")
//#pragma comment(lib,"libeng.lib")
#pragma comment(lib,"mclmcrrt.lib")
#pragma comment(lib,"test.lib")
………………..
BOOL CtestmtDlg::OnInitDialog()
{
手把手教你学VS 2010调用MATLAB函数
……………………………..
// TODO: 在此添加额外的初始化代码
testInitialize();
return TRUE;
// TODO: 在此添加控件通知处理程序代码
double x = 0.1;
mwArray t(0.1);
//mwArray t(1,0.1, mxDOUBLE_CLASS);
//t = mxCreateDoubleMatrix(1,1,mxREAL);
//memcpy(mxGetPr(t),&x,sizeof(double));
add(t);
}
……………………………..
void CtestmtDlg::OnBnClickedButton1()
{
//这是添加的按钮的消息处理
}
………………………
void CtestmtDlg::OnDestroy()
{
}
CDialogEx::OnDestroy();
// TODO: 在此处添加消息处理程序代码
testTerminate();
编译程序时,出了点小问题,提示 matrix.h 文件中 char16_t 重复定义,并且和另外的一个文件
定义不一致。把 matrix.h 文件修改如下:
//typedef CHAR16_T char16_t; 这是修改前的语句
typedef unsigned short char16_t;
再次编译,运行程序如下:
手把手教你学VS 2010调用MATLAB函数
点击“plot”按钮,就绘制出一个正弦曲线。
好了,先讲到这里吧。没来的急检查,先发出来吧!要是还有疑问,请加我的 QQ 群吧:
128229028。记住啊:Work time, no disturbance.
祝大家在学习编程的里程中一帆风顺!