zoukankan      html  css  js  c++  java
  • 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,系统自将释放。

  • 相关阅读:
    获取class
    domReady
    JS原型
    JavaScript继承
    LeetCode 46. Permutations
    LinkCode 第k个排列
    接口测试基础——第5篇xlrd模块
    接口测试基础——第4篇logging模块
    接口测试基础——第3篇smtplib发送带图片的邮件
    接口测试基础——第2篇smtplib发送带附件的邮件
  • 原文地址:https://www.cnblogs.com/qingliu411/p/3327168.html
Copyright © 2011-2022 走看看