VS2010+matlab2012b环境下C++写MAT文件

本人乃C++白痴一枚,今需将一个int数组用mat文件保存,奋战半日有余,终成。恐日后遇类似情况无所从,故而留下此文,待日后查询。

PS:工程设置,亲测,http://blog.csdn.net/left_la/article/details/8206645给出的步骤完全没错,以下为详细过程。

我的计算机环境是win7 64位系统,VS2010,matlab R2012b。

一、工程配置:
1.C/C++->常规->附加包含目录 添加:
MATLABR2010bexterninclude
MATLABR2010bexternincludewin64
2.链接器->常规->附加库目录 添加:
MATLABR2010bexternlibwin64microsoft
MATLABR2010bexternlibwin32microsoft
3.链接器->输入->附加依赖库 添加:
libmat.lib
libmx.lib
libmex.lib
libeng.lib

由于所安装的matlab为64位,要调用其函数,需要将工程转换为X64
4.顶菜单->生成->配置管理器->平台:X64
5.链接器->高级->目标计算机:
MachineX64(/MACHINE:X64)

6.计算机环境变量->path 添加:
E:DevToolsMATLABR2010bexternlibwin64microsoft;
E:DevToolsMATLABR2010binwin64;

代码部分:

包含头文件:

#include <matrix.h>

#include <mat.h>

写文件:

MATFile *pmatFile = matOpen(matName,"w");
mxArray *pMxArray = NULL;
pMxArray = mxCreateDoubleMatrix(N, M, mxREAL);

double* datas = NULL;
datas = (double*)mxMalloc(N*M*sizeof(double)); 


mxSetData(pMxArray, datas);
matPutVariable(pmatFile, "datas", pMxArray);

matClose(pmatFile);

要注意的是:

void mxSetData(mxArray *pm, void *pr);

pr指Pointer to an array. Each element in the array contains the real component of a value. The array must be in dynamic memory; call mxCalloc to allocate this memory. 

动态分配,调用mxMalloc乃关键。

mxMalloc申请的内存,无需mxFree,亦无需free,系统自将释放。

原文地址:https://www.cnblogs.com/qingliu411/p/3327168.html