C/C++教程

C/C++与MATLAB混合编程笔记

本文主要是介绍C/C++与MATLAB混合编程笔记,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

目录
  • 1. 简介
  • 2. MATLAB生成DLL
  • 3. C/C++调用DLL

1. 简介

C/C++和MATLAB之间的混合编程可以是:C/C++编程的过程中调用MATLAB,也可以使MATLAB编程过程中调用C/C++程序。前段时间了解了一下在C/C++程序中调用MATLAB的方法。这其中又分为两类:通过DLL方式调用MATLAB程序通过MATLAB引擎调用MATLAB进行运算,其中仅仅是按照学长要求触及了一下通过MATLAB生成DLL为C提供运算支持的方法。

2. MATLAB生成DLL

  1. 准备被封装函数(这里以一个简单的c=a+b作为演示)
function [c]=add(a,b)
c = a+b;
end
  1. 命令行运行命令deploytools

  2. 在弹出的对话框选择Library Compiler
    1529298429532.png

  3. 在打开的会话框中选择C++ Shared Library,点击右侧小加号,添加你的matlab文件(我这里是add.m

1529298703799.png

  1. 点击Package,进行封装

  2. 生成的文件夹中包含三个子文件夹for_redistributionfor_redistribution_files_onlyfor_testing,其中for_redistribution_files_only中包含的文件就是所需文件

    add
    ├── for_redistribution
    ├── for_redistribution_files_only
    │ ├── add.dll
    │ ├── add.h
    │ ├── add.lib
    │ ├── default_icon.ico
    │ └── readme.txt
    ├── for_testing
    └── PackagingLog.html

3. C/C++调用DLL

  1. 设置Visual Studio项目属性(以Vs2017为例)

    • 设置平台为x64(因为我的matlab是64位版,所以设置为x64,32位为x86)
    • VC++ --> 包含目录添加 Your_MATLAB_PATH\extern\include
    • VC++ --> 库目录添加Your_MATLAB_PATH\lib\win64\microsoft
  2. 将生成的add.dlladd.libadd.h放入C项目文件夹

  3. 编写C程序

    #include "stdafx.h"
    #pragma comment(lib, "mclmcrrt.lib")//引入的mat库文件
    #pragma comment(lib, "mclmcr.lib")//同上
    #pragma comment(lib, "add.lib")//自己的库文件
    #include "add.h"//自己的头文件
    
    using namespace std;
    
    int main() {
    	double a =1 ,b = 2;//设置a,b的值
    	//初始化matlab函数
    	addInitialize();
        //创建matlab的数据类型(matlab中基本的数据类型是double的矩阵)
    	mwArray mat_a(1,1,mxDOUBLE_CLASS);
    	mwArray mat_b(1,1,mxDOUBLE_CLASS);
    	mwArray mat_c(1,1,mxDOUBLE_CLASS);
        //为矩阵a,b赋值
        mat_a(1,1)=a;
        mat_b(1,1)=b;
    	//调用函数进行运算,第一个int类型的参数代表这个函数的输出参数的个数
    	add(1,mat_c,mat_a,mat_b);
    	//创建一个c,用来取出计算出的c
        double *c = new double;
        mat_c.GetData(c, 1);
        //matlab调用结束,释放掉中间过程申请的内存
    	addTerminate();
        
        cout<< c << endl;
    	
        return 0;
    }
    
  4. 生成C++ Shared Library与生成C Shared Library相比,C++ Shared Library调用过程更为友好,申请变量更简单,同时使用Terminate()即可释放掉运行过程中临时申请的内存空间

这篇关于C/C++与MATLAB混合编程笔记的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!