vs2013 cpp qt 直接调用matlab m文件

开发环境:vs2013 cpp qt win7 matlab R2016b
1、matlab R2016b版本界面主页,设置路径,把本地存储m代码文件的目录添加到matlab的程序搜索目录中。
2、vs2013代码中
#include “engine.h”
头文件目录设置
E:\MATLAB\R2016b\extern\include
库路径设置
E:\MATLAB\R2016b\extern\lib\win64\microsoft
库添加
libeng.lib
libmat.lib
libmex.lib
libmx.lib
3、cpp代码示例

    Engine *ep = NULL;
    mxArray *value = NULL;
    if (!(ep = engOpen(NULL)))
    {
        fprintf(stderr, "\n无法启动MATLAB引擎\n");
        return;
    }
    engEvalString(ep, "value = test_add(1,5)");//matlab设置路径,把存储本地m文件的路径添加到默认搜索路径中。
    value = engGetVariable(ep, "value");
    int M = mxGetM(value);
    int N = mxGetN(value);
    double i = 0;
    memcpy((void *)&i, (void *)mxGetPr(value), sizeof(mxGetPr(value)) * M * N);
    mxDestroyArray(value);
    engClose(ep);

4、test_add.m文件的代码如下:

function [c] =test_add(a,b)
c = a+b;
end

5、直接运行matlab代码的示例

    Engine *ep = NULL;
    mxArray *value = NULL;
    if (!(ep = engOpen(NULL)))
    {
        fprintf(stderr, "\n无法启动MATLAB引擎\n");
        return ;
    }
    engEvalString(ep, "value = 1+5");
    value = engGetVariable(ep, "value");
    int M = mxGetM(value);
    int N = mxGetN(value);
    double i = 0;
    //printf("value = %f\n", *mxGetPr(value));
    memcpy((void *)&i, (void *)mxGetPr(value), sizeof(mxGetPr(value)) * M * N);
    
    mxDestroyArray(value);
    engClose(ep);

猜你喜欢

转载自blog.csdn.net/weixin_43172531/article/details/105570403