【转】C++调用Matlab的.m文件

时间:2021-08-28 21:14:38
 
 
Matlab是一个强大的数学计算/仿真工 具,其内置了很多实用的现成的函数,而且我们经常也自己定义很多m函数。但在很多情况下,我们不得不使用VC编程。那么,如何在VC中利用matlab的 资源呢? 在这里我简要的以一个简单的例子来说明一下如果在VC中调用matlab中定义的.m文件。繁多的理论就不说了,简明扼要的说一个实例。相信大家看过之后 都会马上学会的
其中灰色底显示的部分是需要我们手工输入的部分。
 
步骤如下:

㈠当然是先建立matlab的m文件。

这里为了简单起见,我在matlab中定义了一个函数, 其m文件如下:
function y = add_zh(a,b)     
y=a+b
保存为myfunct.m
 

㈡下面来对matlab编译环境进行设置。

打开matlab,在命令行状态下键入:mex-setup

然后出现如下提示:
--------------------------------------------------------------------------------------
Select a compiler:
[1] Borland C++Builder version 5.0 in C:\Program Files\Borland
[2] Lcc C version 2.4 in F:\SOFT\SHARE\MATLAB65\sys\lcc
[3] Microsoft Visual C/C++ version 6.0 in C:\Program Files\Microsoft Visual Studio
[0] None
 
Compiler:
--------------------------------------------------------------------------------------
这里我们选择’3’。(如果使用其他的编译器比如BCB,那么就可以相应的选择’1’)
然后,继续在命令行状态下输入:
mbuild –setup
--------------------------------------------------------------------------------------
Please choose your compiler for building standalone MATLAB applications: 
Would you like mbuild to locate installed compilers [y]/n? y
Select a compiler:
[1] Borland C++Builder version 5.0 in C:\Program Files\Borland
[2] Lcc C version 2.4 in F:\SOFT\SHARE\MATLAB65\sys\lcc
[3] Microsoft Visual C/C++ version 6.0 in C:\Program Files\Microsoft Visual Studio
[0] None
 
Compiler:
--------------------------------------------------------------------------------------
这里需要几步确认。大家按情况操作即可。
 

㈢对VC的编译器环境进行设置。

在Tools-options-directory里面设置include和lib的路径,分别添加一项,指向matlab安装目录中的\extern\include和 \extern\lib
 
 

㈣将.m文件编译为动态链接库

这一步比较关键。在这一步中,将matlab中的.m文件转换为dll。
在matlab命令行中输入:
mcc -t -h -L C -W lib:ppp -T link:lib
myfunct.m
aaarticlea/png;base64,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" alt="" />
 
 
至此,可以发现在myfunct.m所在的目录中产生了一大堆文件。我们只用其中3个:
ppp.h   
ppp.lib    
ppp.dll
 
 

㈤ 测试与调用

1. 新建一个VC工程。这里取名为mat。为了简单,我们在这里建立一个对话框来进行演示。如下:

然后,将上面这3个文件拷贝到VC工程所在的目录中,以便VC调用之。

 
2. 进行VC编程。
首先,在cpp文件中加入: #include
“ppp.h”;
然后,设置VC的链接库。在project-settings-link下的object/library
modules中加入:
ppp.lib;libmx.lib;libmatlb.lib;libmmfile.lib;
    至此,VC的编译环境设置完毕。下面就是编程部分了。
 
3. 编程部分的关键:接口和数据类型的转换
先给出VC实现的源代码:
void CMatDlg::OnButton1()
{ //在matlab中定义的m文件:myfunct,其功能是完成两个数的相加操作。
CString str;
UpdateData(true);
pppInitialize();
//为了调用matlab中的函数,必须使用数组数据类型,并其后调用matlab函数将其转化为矩阵格式(matlab的基本数据类型是矩阵)
static double x1[1]={1.0};
static double x2[1]={2.5};
double result;
//调用matlab创建3个矩阵
mxArray *A=mclGetUninitializedArray();
mxArray *B=mclGetUninitializedArray();
mxArray *C=mclGetUninitializedArray();
//将C语言中的变量值赋给matlab中的矩阵
mlfAssign(&A,mlfDoubleMatrix(1,1,x1,NULL));
mlfAssign(&B,mlfDoubleMatrix(1,1,x2,NULL));
mlfAssign(&C,mlfMyfunct(A,B));
//将matlab中的矩阵的指针传递给C语言中的指向double的指针
double * md=mxGetPr(C);
result=md[0];
//释放这些矩阵
mxDestroyArray(A);
mxDestroyArray(B);
mxDestroyArray(C);
str.Format ("It is : %f",result);
::AfxMessageBox(str);
}
相信看到里面的注释,我们就明白的差不多了。
VC编程以实现对matlab函数的调用,例如VC中我们实现两个double型的相加,则需要做上述的编程:首先定义两个数组并存入我们要进行函数操作的数据(也就是所谓的实参);然后将这两个数组转换为matlab可以识别的矩阵;然后调用m文件中自定义的函数,对矩阵进行操作;最后将结果再转回VC支持的数据格式:
            double * md=mxGetPr(C);
            result=md[0];     
至此,经matlab函数处理过的数据已经存入了VC中的result变量。        
            mlfAssign(&C,mlfMyfunct(A,B));
大家可以看出来,在进行调用的时候,我们使用的是m文件的文件名myfunct,而不是m文件中定义的add_zh(a,b)
程序中,我们要实现1.0和2.5的相加运算,结果如下:
。。。
 
运行报错:e:\program files\matlab\r2009a\extern\include\mclmcr.h(1764) :
error C2065: 'REFCLSID' : undeclared identifier
e:\program files\matlab\r2009a\extern\include\mclmcr.h(1764) :
error C2146: syntax error : missing ')' before identifier
'clsid'
e:\program files\matlab\r2009a\extern\include\mclmcr.h(1764) :
error C2182: 'mclCLSIDtochar_proxy' : illegal use of type
'void'
e:\program files\matlab\r2009a\extern\include\mclmcr.h(1764) :
error C2059: syntax error : ')'
e:\program files\matlab\r2009a\extern\include\mclmcr.h(1768) :
error C2065: 'REFGUID' : undeclared identifier
e:\program files\matlab\r2009a\extern\include\mclmcr.h(1768) :
error C2146: syntax error : missing ')' before identifier
'guid'
未解决