C/C++调用matlab

C/C++调用matlab

matlab虽然可以生成C/C++的程序,但其能力很有限,很多操作无法生成C/C++程序,比如函数求解、优化、拟合等。为了解决这个问题,可以采用matlab和C/C++联合编程的方式进行。使用matlab将关键操作打包成dll环境,再由C/C++调用。

所需环境

  1. windows11
  2. matlab2018a
  3. VsStudio2017、VsStudio2022

matlab生成dll

  1. 编写待测试的matlab函数“test1”
function y = test1(a,b)%TEST1 此处显示有关此函数的摘要%   此处显示详细说明x=fminunc(@(x)x^2+4*x+5,1);y = cos(a) + b^2 + 3 + x;
end
  1. 使用matlab命令“mex -setup”设置MEX,点击选择“mex -setup C++”;
  2. 使用matlab命令“mbuild -setup”设置MBUILD,点击选择“mex -setup C++ -client MBUILD ”;
  3. 使用matlab命令“mcc -B csharedlib:test1 test1.m”,等待生成所需的问题;
    生成的主要文件有:“test1.h”、“test1.lib”、“test1.dll”

C/C++调用dll

  1. 编写main.cpp
#include "test1.h"#include <iostream>#pragma comment (lib,"test1.lib")using namespace std;int main() {cout << "Hello CMake." << endl;// 初始化,必不可少if (!test1Initialize()) {std::cout << "failed to initialize test1" << std::endl;return -1;}mxArray* a = mxCreateDoubleMatrix(1, 1, mxREAL);double aSNR[] = { -1 };memcpy(mxGetPr(a), (void*)aSNR, sizeof(aSNR));mxArray* b = mxCreateDoubleMatrix(1, 1, mxREAL);double SNR[] = { 1 };memcpy(mxGetPr(b), (void*)SNR, sizeof(SNR));mxArray* c = mxCreateDoubleMatrix(1, 1, mxREAL);mxArray** y = &c;mlfTest1(1, y, a, b);double* dataPtr = mxGetPr(*y);cout << "res: " << dataPtr[0] << endl;test1Terminate();cout << "end" << endl;return 0;
}
  1. 编写CMakeLists.txt
cmake_minimum_required (VERSION 3.8)project ("C_Matlab")include_directories(C:\\tools\\matlab\\extern\\include    #改成本地matlab的安装位置
)link_directories(.\\C:\\tools\\matlab\\extern\\lib\\win64\\microsoft    #改成本地matlab的安装位置
)# 将源代码添加到此项目的可执行文件。
add_executable (test0 "main.cpp"
)
target_link_libraries(test0test1mclmcrrt
)
  1. 将文件“test1.h”和"test1.lib"放到CMakeList.txt文件所在的文件夹下;
  2. 使用VSstudio2022打开CMakeList.txt文件所在的文件夹,并进行编译;
  3. 将文件“test1.dll”放到可执行文件“test0”所在的目录下;
  4. 运行可执行程序“test0”。

异常处理

mex -setup异常


图1

通常,只需要按照VSstudio2017即可。

应用程序处于中断模式


图2

点击“调试”、“窗口”,选择“异常设置”,取消“Win32 Exceptions”的点选模式


图3

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/338483.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蓝凌EIS智慧协同平台 ShowUserInfo.aspx 存在 SQL注入漏洞

产品简介 蓝凌EIS智慧协同平台是一款专为企业提供高效协同办公和团队合作的产品。该平台集成了各种协同工具和功能&#xff0c;旨在提升企业内部沟通、协作和信息共享的效率。 漏洞概述 由于蓝凌EIS智慧协同平台 ShowUserInfo.aspx接口处未对用户输入的SQL语句进行过滤或验证…

如何使用 Helm 在 K8s 上集成 Prometheus 和 Grafana|Part 2

在 Part 1 中&#xff0c;我们一起了解了什么是 Prometheus 和 Grafana&#xff0c;以及使用这些工具的前提条件和优势。在本部分&#xff0c;将继续带您学习如何安装 Helm 以及如何使用 Prometheus Helm Charts。 开始使用 Helm 和 Helm Chart ArtifactHub 为 Helm Chart 提供…

SCP命令实现Linux和Windows系统间文件互传,dos窗口上传文件到sftp服务器

SCP windows 上传文件到Linux 操作步骤&#xff1a; 在文件所在目录开启dos执行命令 scp 文件全路径 目标主机账户ip:路径回车输入目标主机账户密码即可 SCP 从Linux上下载文件 scp 账户ip:文件绝对路径 ./当前用户路径 Windows系统dos窗口上传文件到sftp服务

MySQL从0到1全教程【1】MySQL数据库的基本概念以及MySQL8.0版本的部署

1 MySQL数据库的相关概念 1.1 数据库中的专业术语 1.1.1 数据库 (DB) 数据库是指:保存有组织的数据的容器(通常是一个文数据库 (database)件或一组文件)。 1.1.2 数据库管理系统 (DBMS) 数据库管理系统(DBMS)又称为数据库软件(产品)&#xff0c;用于管理DB中的数据 注意:…

海康摄像头配置电子围栏

需求背景 当有人进入到规划的区域内就会自动报警&#xff0c;目前配置的是语音播报闪光灯闪烁。 操作教程 1、打开配置界面 登录萤石云平台-设备管理-设备配置-立即配置 2、报警语音配置 默认进入的是配置界面&#xff0c;不要在这里配置。 不要在【配置】-【事件】-【事…

CSS 弹幕按钮动画

<template><view class="content"><button class="btn-23"><text class="text">弹幕按钮</text><text class="marquee">弹幕按钮</text></button></view></template><…

强化学习求解TSP(六):Qlearning求解旅行商问题TSP(提供Python代码)

一、Qlearning简介 Q-learning是一种强化学习算法&#xff0c;用于解决基于奖励的决策问题。它是一种无模型的学习方法&#xff0c;通过与环境的交互来学习最优策略。Q-learning的核心思想是通过学习一个Q值函数来指导决策&#xff0c;该函数表示在给定状态下采取某个动作所获…

分布式消息服务kafka

分布式消息队列DMS 什么是消息中间件&#xff1f; 消息中间件是分布式系统中重要的组件&#xff0c;本质就是一个具有接收消息、存储消息、分发消息的队列&#xff0c;应用程序通过读写队列消息来通信。 例如&#xff1a;在淘宝购物时&#xff0c;订单系统处理完订单后&#…

SpringBoot多环境配置Maven Profile组

Maven profile组 注意切换配置时 mvn clean下 或者 clean 加install 或者compile 编译 clean之后 install下 或者compile 编译 nohup java -Xms256m -Xmx512m -Dfile.encodingUTF-8 -jar demo.jar --spring.profiles.activeprod > system.log 2>&1 &

计算机图形学流体模拟 blender 渲染脚本

做流体模拟的时候&#xff0c;想要复现别人的成果&#xff0c;但是别人的代码都是每帧输出 ply 格式的文件&#xff0c;渲染部分需要自己完成 看了一下&#xff0c;似乎用 blender 是最简单的&#xff0c;于是记录一下过程中用到的代码 Blender 版本 4.0 批量导入 ply 假设…

Vue入门四(组件介绍与定义|组件之间的通信)

文章目录 一、组件介绍与定义介绍定义1&#xff09;全局组件2&#xff09;局部组件 二、组件之间的通信1&#xff09;父组件向子组件传递数据2&#xff09;子传父通信 一、组件介绍与定义 介绍 组件(Component)是Vue.js 最强大的功能之一&#xff0c;它是html、css、js等的一个…

【算法】不使用库函数,求解立方根

牛客原题&#xff1a;https://www.nowcoder.com/practice/caf35ae421194a1090c22fe223357dca?tpId37&tqId21330&rp1&ru/exam/oj/ta&qru/exam/oj/ta&sourceUrl%2Fexam%2Foj%2Fta%3FtpId%3D37&difficultyundefined&judgeStatusundefined&tags&a…