zoukankan      html  css  js  c++  java
  • C/C++与MATLAB混合编程笔记

    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_PATHexterninclude
      • VC++ --> 库目录添加Your_MATLAB_PATHlibwin64microsoft
    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()即可释放掉运行过程中临时申请的内存空间

  • 相关阅读:
    beta冲刺(6/7)
    beta冲刺(5/7)
    beta冲刺(4/7)
    beta(3/7)
    beta冲刺(2/7)
    beta冲刺(1/7)
    团队项目测评博客
    东华理工18级计科五班团队作业六
    东华理工18级计科五班团队作业五
    东华理工18级计科五班团队作业四
  • 原文地址:https://www.cnblogs.com/ph1sh/p/14710686.html
Copyright © 2011-2022 走看看