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.mzph.cn/news/611395.shtml

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

相关文章

MySQL 存储引擎全攻略:选择最适合你的数据库引擎

1. MySQL的支持的存储引擎有哪些 官方文档给出的有以下几种&#xff1a; 我们也可以通过SHOW ENGINES命令来查看&#xff1a; 还可以通过ENGINES表查看 2. 存储引擎比较 我们通过存储引擎表来看各自的优点&#xff1a; InnoDB 默认的存储引擎&#xff08;SUPPORT字段为D…

广东做“人工心脏”可以报销啦

&#xff08;人民日报健康客户端记者 杨林宋&#xff09;1月5日&#xff0c;据南方医科大学珠江医院消息&#xff0c;医院为一位57岁患者处于心衰终末期的患者&#xff0c;植入一款国产“人工心脏”——左心室辅助装置。据了解&#xff0c;这是该款“人工心脏”纳入广东省医保准…

py的循环语句(for和while)

前言&#xff1a;本章节和友友们探讨一下py的循环语句&#xff0c;主播觉得稍微有点难主要是太浑了&#xff0c;但是会尽量描述清楚&#xff0c;OK上车&#xff01;&#xff08;本章节有节目效果&#xff09; 目录 一.while循环的基本使用 1.1关于while循环 1.2举例 1.31-1…

[C#]使用winform部署PP-MattingV2人像分割onnx模型

【官方框架地址】 https://github.com/PaddlePaddle/PaddleSeg 【算法介绍】 PP-MattingV2是一种先进的图像和视频抠图算法&#xff0c;由百度公司基于PaddlePaddle深度学习框架开发。它旨在提供更精准和高效的图像分割功能&#xff0c;特别是在处理图像中的细微部分&#xf…

【Copilot使用】

Copilot是什么 copilot有多火&#xff0c;1月4日&#xff0c;科技巨头微软在官网上宣布将为Windows 11 PC推出Copilot键。 Copilot是微软在Windows 11中加入的AI助手&#xff0c;该AI助手是一个集成了在操作系统中的侧边栏工具&#xff0c;可以帮助用户完成各种任务。 Copilo…

C语言之三子棋小游戏的应用

文章目录 前言一、前期准备模块化设计 二、框架搭建三、游戏实现打印棋盘代码优化玩家下棋电脑下棋判断输赢 四、结束 前言 三子棋是一种民间传统游戏&#xff0c;又叫九宫棋、圈圈叉叉棋、一条龙、井字棋等。游戏分为双方对战&#xff0c;双方依次在9宫格棋盘上摆放棋子&#…

布偶猫主食冻干优选推荐:K9、sc、希喂三款对比测评

喂食布偶猫的小技巧&#xff1a;如何平衡其食肉习性与脆弱肠胃&#xff1f;主食冻干来帮忙&#xff01;它既符合猫咪天然的饮食结构&#xff0c;又采用新鲜生肉为原料。搭配其他营养元素&#xff0c;既美味又营养&#xff0c;还能增强抵抗力。我们将为您测评市场上热门的k9、sc…

CUDA的编程模式

本章介绍了CUDA编程模型背后的主要概念&#xff0c;概述了它们在C中是如何公开的。在编程接口中对CUDA C进行了详细的描述。 本章和下一章中使用的矢量加法示例的完整代码可以在矢量加法CUDA示例中找到。 2.1、内核 CUDA C通过允许程序员定义称为内核的C函数来扩展C&#xff0…

MS-DETR论文解读

文章目录 前言一、摘要二、引言三、贡献四、MS-DETR模型方法1、模型整体结构解读2、模型改善结构解读3、一对多监督原理 五、实验结果1、实验比较2、论文链接 总结 前言 今天&#xff0c;偶然看到MS-DETR论文&#xff0c;以为又有什么高逼格论文诞生了。于是&#xff0c;我想查…

PandoraNext—一个让你呼吸顺畅的ChatGPT

博客地址 PandoraNext—一个让你呼吸顺畅的ChatGPT-雪饼 (xue6ing.cn)https://xue6ing.cn/archives/pandora--yi-ge-rang-ni-hu-xi-shun-chang-de-chatgpt 项目 项目地址 pandora-next/deploy 项目介绍 支持多种登录方式&#xff1a; 账号/密码 Access Token Session To…

【大数据OLAP引擎】StartRocks存算分离

存算分离的原因 降低存储成本&#xff1a;同样的存储大小对象存储价格只有SSD的1/10&#xff0c;所以号称存储成本降低80%不是吹的。 存算一体到存算分离 存算一体 作为 MPP 数据库的典型代表&#xff0c;StarRocks 3.0 版本之前使用存算一体 (shared-nothing) 架构&#xf…

Oracle regexp_substr

select regexp_substr(123|456|789, [^|], 1, 2) from dual;

软件测试|快速、可靠的JavaScript依赖管理工具——yarn

简介 Yarn是一个由Facebook于2016年推出的JavaScript软件包管理器。它的目标是解决npm&#xff08;Node.js的默认软件包管理器&#xff09;在性能和可靠性方面的一些问题。Yarn旨在提供更快、更安全、更稳定的依赖项安装过程&#xff0c;使JavaScript开发人员能够更轻松地管理…

TortoiseSVN·文件锁定与清理

安装 TortoiseSVN 的时候&#xff0c;选择 svn 命令可用, 选择 will be intalled on local hard drive 。 在锁定的文件夹内 cmd 进入终端&#xff0c;输入 find . -type f -name ".svn/lock" -exec rm -f {} \; 删除所有锁定文件。进行清理操作&#xff1a;svn clea…

RHCE9学习指南 第18章 日志

日志中记录了各种各样的问题&#xff0c;所以读取日志是检测并排除故障的一个重要方式&#xff0c;日志文件默认放在/var/log/目录下。不同的问题要读取不同的日志&#xff0c;例如&#xff0c;邮件发不出去&#xff0c;可以读取日志文件件/var/log/maillog&#xff1b;要查看哪…

【38 Pandas+Pyecharts | 奥迪汽车销量数据分析可视化】

文章目录 &#x1f3f3;️‍&#x1f308; 1. 导入模块&#x1f3f3;️‍&#x1f308; 2. Pandas数据处理2.1 读取数据2.2 查看数据信息2.3 数据处理 &#x1f3f3;️‍&#x1f308; 3. Pyecharts数据可视化3.1 奥迪用户购车时间分布3.2 奥迪各系销量占比饼图3.3 奥迪各系销量…

外汇天眼:CQG 与 TradeStation Securities 的经纪服务集成

TradeStation Securities, Inc.&#xff0c;一家自营的在线股票、ETF、期权和期货交易经纪公司&#xff0c;宣布与CQG合作&#xff0c;CQG是一家为交易员、经纪商、商业套保者和交易所提供高性能技术解决方案的全球供应商&#xff0c;已与TradeStation Securities的经纪服务集成…

Zustand 状态管理

Zustand 状态管理 安装创建 Store给 Store 添加TS类型约束在页面使用 Store返回 Store 中所有状态在 Store 中使用 async 异步方法使用 Immer Middleware (中间件) 更新深层嵌套的 State使用 get 方法&#xff0c;在 set 方法外访问 State 中的数据使用 selector什么是 selecto…

GNN如何处理表格?

链接: https://ieeexplore.ieee.org/document/10184514 在这篇综述中&#xff0c;我们深入探讨了使用图神经网络&#xff08;GNNs&#xff09;进行表格数据学习&#xff08;TDL&#xff09;的领域&#xff0c;这是一个深度学习方法在分类和回归任务中相比传统方法表现出越来越…

Unity中BRP下的深度图

文章目录 前言一、在Shader中使用1、在使用深度图前申明2、在片元着色器中 二、在C#脚本中开启摄像机深度图三、最终效果 前言 在之前的文章中&#xff0c;我们实现了URP下的深度图使用。 Unity中URP下使用屏幕坐标采样深度图 在这篇文章中&#xff0c;我们来看一下BRP下深度…