C++通过动态链接库(.dll)调用matlab

2022年9月15日 18点热度 0人点赞

matlab拥有强大的数学计算能力,而C++拥有强大的编程能力,所以使用C++程序调用matlab可以很好的解决C++编程中遇到的数学计算问题。

工具/原料

  • matlab 2015a
  • Visual Studio 2013
  • win7 64位电脑

方法/步骤

  1. 1

    C++可以以多种方式调用matlab。

    1、通过调用动态链接库。

    2、通过matlab引擎。

    3、通过COM组件。

    4、通过.NET配件。

    这里只介绍C++调用matlab的M文件生成的dll的形式,其他方式可以参考《精通MATLAB与C/C++混合编程》这本书 。

  2. 2

    配置MATLAB

    首先编写一个简单的matlab函数。

    选择左上角的New->function

    编写代码。

    然后点击左上角Save,然后会生成一个add.m的文件。

  3. 3

    在Command Window窗口配置Matlab。

    输入 mex -setup(mex后边有空格)。

    选择mex -setup C++ 

  4. 4

    接着输入mbuild -setup命令(mbuild后边有空格)

    选择mex -setup C++ -client MBUILD 

  5. 5

    在命令行窗口输入命令mcc -W cpplib:add -T link:lib add  前面的 add 是编译产生的文件名,后一个 add 指要编译的.

    -W是命令,有多种可选。具体的相关命令和含义可以 doc mcc查看

     add是m文件的名字,生成别的m文件就把add换成你的m文件的名字即可。

  6. 6

    成功后会在MATLAB安装位置生成十个文件。

    MATLAB到这里就配置完成了,动态链接库也生成了。

    END

方法/步骤2

  1. 1

    C++的相关操作。

    新建一个win32控制台程序matlabtest(空项目),添加test.cpp

  2. 2

    点击 项目->Matlabtest属性

    C/C++ -> 常规 -> 附加包含目录:

    C:\Program Files\MATLAB\R2015a\extern\include(添加你自己的路径)

  3. 3

    链接器 -> 常规 -> 附加库目录:

    "C:\Program Files\MATLAB\R2015a\extern\lib\win64\microsoft";

    C:\Program Files\MATLAB\R2015a\bin\add(MATLAB生成的是个文件)

  4. 4

    链接器 -> 输入 -> 附加依赖项:

    mclmcrrt.lib;mclmcr.lib;add.lib

  5. 5

    将add.lib add.h文件复制到你的工程目录,其中 .h 文件和 test.cpp 文件同目录, .lib 文件放到可执行目录中,也即Debug目录(需编译一次才会出现),.dll文件复制到system32目录

  6. 6

    将 .h 文件添加到新建的项目,编写 test.cpp 文件中的代码:

    #include "add.h"

    #include <iostream>

    using namespace std;

    int main()

    {

    if (addInitialize())    //必须的要初始化,格式为  名字Initialize()

    {

    cout << "成功" << endl;

    }

    else

    {

    cout << "失败" << endl;

    return 0;

    }

    //定义3个mwArray类型变量,用于存放矩阵

    mwArray a(2, 3, mxDOUBLE_CLASS);

    mwArray b(2, 3, mxDOUBLE_CLASS);

    mwArray c(2, 3, mxDOUBLE_CLASS);

    double x[] = { 2,3,1,5,4,5 };

    double y[] = { 8,8,7,9,11,12 };

    double *sum = new double[6];        //注意这个是指针

    // 给输入 mxArray 对象赋值

    a.SetData(x, 6);

    b.SetData(y, 6);

    //调用DLL函数

    add(1, c, a, b);

    //获取结果

    c.GetData(sum, 6);

    //输出结果

    for (int i = 0; i<2; i++)

    {

    for (int j = 0; j<3; j++)

    cout << sum[j * 2 + i] << " ";

    cout << endl;

    }

    cout << "it is successful !" << endl;

    return 0;

    }

  7. 7

    更改解决方案平台,需要更改成X64

    END

注意事项

  • 第一次运行可能需要等待的时间久一点
  • 运行之前一定要初始化addInitialize()
  • 不能在win32下运行
经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。
作者声明:本篇经验系本人依照真实经历原创,未经许可,谢绝转载。
展开阅读全部

laozhao

这个人很懒,什么都没留下

文章评论