C++创建和调用MATALB的MAT文件
所用软硬件平台:VS2008 sp1 matlab 2009b ,32位PC,XP系统
所用程序
//创建一个.mat文件,并在里面存储一个double型变量,并赋值初值
#include
#include
#include
#include"mat.h"
using namespace std;
int main()
{
mxArray *pa1;
double data[1]={3.141592653};
MATFile *pmat;//定义一个MAT文件指针
const char*file="VS_MAT.mat";
cout<<"Creating file "< pmat=matOpen(file,"w");//打开或创建一个MAT文件 if(pmat==NULL) { cout<<"创建失败"< return(EXIT_FAILURE); } pa1=mxCreateDoubleMatrix(1,1,mxREAL);//mxREAL表示创建一个实数的*1的array if(pa1==NULL) { cout<<"创建失败"< return(EXIT_FAILURE); } //初始化变量pa1;向MAT文件中写入变量pa1,并命名为a; memcpy( (void*)(mxGetPr(pa1)),(void*)data,sizeof(data));//mxGetPr与mxGetPi分别是得到double类型 //array的实部指针和虚部指针的API int status; status=matPutVariable(pmat,"a",pa1);//向MAT文件中写入变量pa1,并命名为a; if(status!=0) { cout<<"赋值失败"< return(EXIT_FAILURE); } //清除矩阵 mxDestroyArray(pa1); //关闭MAT文件 if(matClose(pmat)!=0) { cout<<"关闭mat文件失败"< return(EXIT_FAILURE); } /******************************************************************/ //对VS_MAT.mat 中变量a 读取,并进行运算,后存储 pmat=matOpen(file,"u");//关键,u:表示读写方式打开,r,只读,我,只写,if(pmat==NULL) { cout<<"打开mat文件失败"< return EXIT_FAILURE; } //在VS_MAT.mat中读取变量a pa1=matGetVariable(pmat,"a"); if(pa1==NULL) { cout<<"读取变量失败"< return EXIT_FAILURE; } //对a运算,平方 memcpy( (void*)data,(void*)mxGetPr(pa1),sizeof(data)); data[0]=data[0]*data[0]; //?????? memcpy( (void*)mxGetPr(pa1),(void*)data,sizeof(data)); status=matPutVariable(pmat,"a",pa1);//向MAT文件中写入变量pa1,并命名为a; if(status!=0) { cout<<"赋值失败"< return(EXIT_FAILURE); } //清除矩阵 mxDestroyArray(pa1); //关闭MAT文件 if(matClose(pmat)!=0) { cout<<"关闭mat文件失败"< return(EXIT_FAILURE); } cout<<"press any key to continue"< cin.get(); return 0; } VS2008环境设置 第一步:通过菜单工具/选项,打开选项页,点击项目和解决方案,然后在页面右面“显示以下内容的目录”下拉列表框中选择“包含文件”,添加路径:"D:\Program files\MATLAB\R2009b\extern\include"。 第二步:选择“库文件”,添加路径: D:\Program Files\MATLAB\R2009b\extern\lib\win32\microsoft 以上步骤1)、2)只需设置一次,因为是对VS2008整体工作环境的设置。 3) 右击工程/属性,打开项目属性页,选择链接器/输入,在附加依赖项编辑框中,添加文件名libmx.lib libmat.lib 4)如此设置后,能够正常编译,但运行时报错说找不到dll文件,如下 而libmx.dll是存在于D:\Program Files\MATLAB\R2009b\bin\win32文件夹中,而在Win7系统变量里Matlab在安装的时候时只写入了路径D:\Program Files\MATLAB\R2009b\bin,故系统不会自动到其子文件中找dll,从而报错说找不到文件,这也解释了为什么旧版本的Matlab无此问题,因为可能旧版本的Matlab中没有将这些dll分离放到win32子文件夹中。 所以只要在系统变量中包含路径D:\Program Files\MATLAB\R2009b\bin\win32即可。 设置路径:我的电脑->(右击)属性->高级->环境变量->新建 变量名:Path 变量值:D:\Program Files\MATLAB\R2009b\bin\win32 如果以上设置完成后,运行仍报错,可以尝试将VS2008关掉再启动,我就是这样,环境变量设置好后,仍然报错,重启电脑也解决不了问题,后尝试关掉工程,再启动运行就OK了!如果还出现下面问题: 如下设置: 最后VS_MAT.mat文件在当前project所在目录下可以找到