matlab和C++混合编程(C++程序中用MATLAB的m文件,DLL方法)

具体的代码程序在文章末尾。具体的问题解答在文章末尾。

步骤一:

1,mex -setup设置编译器C++,这里我选择的是2013的版本(我的电脑上有10和13两个版本)。

matlab和C++混合编程(C++程序中用MATLAB的m文件,DLL方法)

matlab和C++混合编程(C++程序中用MATLAB的m文件,DLL方法)

2,mbuild -setup设置编译器C++

matlab和C++混合编程(C++程序中用MATLAB的m文件,DLL方法)

步骤二,编写自己的m文件,所有的m文件一定要放在一个文件夹中。 

function [r,h]=You(a,b,flag)
    if flag==0
        r=Add(a,b);		%子函数加
    end
    if flag~=0
        r=Cheng(a,b);		%子函数乘
    end
    h=3;
    %     r = a+b;
end

function r=Add(a,b)
    r=a+b;
end
function r=Cheng(a,b)
    r=a*b;
end

步骤三,进行编译,这里可能出现错误,参见下面的解决方法。

mcc -W cpplib:libYou -T link:lib You.m 

matlab和C++混合编程(C++程序中用MATLAB的m文件,DLL方法)

matlab和C++混合编程(C++程序中用MATLAB的m文件,DLL方法)

步骤四:进行环境的配置。

1,

Step1:在系统环境变量的Path中添加“Matlab安装目录\bin\win64;”

Step2:在项目属性中的VC++目录下的包含目录添加“Matlab安装目录\extern\include;”

Step3:在项目属性中的VC++目录下的库目录添加“Matlab安装目录\extern\lib\win64\microsoft;”

2,

项目属性--链接器---输入----附加依赖项-中添加以下库名

libmat.lib

libmex.lib

mclmcr.lib

mclmcrrt.lib

libemlrt.lib

libeng.lib

libfixedpoint.lib

libcovrt.lib

步骤五:进行代码测试

将生成的.h,.dll,.lib文件加入测试程序,进行程序代码测试。

//#include "stdafx.h"  
#include <stdio.h>  
#include <iostream>  
#include "matrix.h"  

#include "libYou.h" 
using namespace std;
#pragma comment(lib,"libYou.lib")  //静态的加入库文件,,,当然也可以在附件依赖项中直接添加

int main()
{
    int jieguo=0;
    if (!libYouInitialize())    //初始化 动态链接库,这一步是必须的 
    {
        printf("Could not initialize addfunction!");
        exit(0);
    }
    printf("OK!\n");
    
    mwArray h(1, 1, mxDOUBLE_CLASS, mxREAL);     //一行一列的矩阵
    mwArray result(1, 1, mxDOUBLE_CLASS, mxREAL);
    mwArray c(1, 1, mxDOUBLE_CLASS, mxREAL);
    mwArray a(1, 1, mxDOUBLE_CLASS, mxREAL);
    //一行一列的矩阵
    mwArray b(1, 1, mxDOUBLE_CLASS, mxREAL);
    //一行一列的矩阵
    double data1 = 2; double data2 = 5; double flag = 0;
    printf("%f\n", data1);
    a.SetData(&data1, 1);            //赋值
    b.SetData(&data2, 1);
    c.SetData(&flag, 1);
    //赋值
    //result.SetData(&data2, 1);
    //赋值

    You(2, result, h,a, b,c);              //调用自己用matlab写的函数结果返回到result中
    double d = result;
        //获取结果
    cout << "result="<<result << endl;
    cout << "h="<<h << endl;
    //printf("%f\n", d);            //打印输出(这里是控制台程序)
    //cout << d << endl;
    libYouTerminate();                //使用完库,必须关掉
    return 0;
}

matlab和C++混合编程(C++程序中用MATLAB的m文件,DLL方法)

具体的matlab和VS程序代码在这里。

https://download.csdn.net/download/yanxiaoyunsana/11105893

一些常见的问题解答在下一篇文章。

https://blog.csdn.net/yanxiaoyunsana/article/details/89202374