本人乃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,系统自将释放。