matlab生成dll

2023-11-18

实验室的一个项目需要调用matlab程序。经过再三考虑,决定使用vc调用matlab导出库的形式。而我主要负责与matlab程序结合的工作。以下是今天工作的简要总结。全当是个备忘吧。

1:在matlab中选择compiler。

     在命令行窗口输入:mex -setup  

    按照提示选择vc6.0.由于使用的是matlab7,不识别vs2010和2008,无奈有装的vc6.0。但听说最新版的matlab可以识别。

2:选择builder.

   输入:mbuild -setup

   同样选择vc6.0

3:生成dll。

   输入:mcc -W cpplib:mydll  -T link:lib test.m


众所周知Matlab的强大运算能力让各种工程软件望而却步,而VC程序的友好界面又让人爱不释手,如果能够让两者的优势结合起来的话,势必能让程序员欢欣鼓舞。还好MathWorks已经为我们想到了,基本上现在市面上主流的Matlab版本都可以支持VC和Matlab的混合编程。但是目前网上资料基本上都是基于Matlab 6.0和VC 6.0的,和新版本的实现方法有所不同,因此笔者通过不断的尝试和研究,终于调试通了基于VS2008和Matlab R2010b的混合编程。

为了更加直观的说明如何实现混合编程,笔者写了一个简单的程序作为测试。先在Matlab里面写一个M文件,代码如下:

function b = MyFunc(a)

b = a.*a;

将M文件保存为MyFunc.m,保存在F:/test文件夹中。然后在Matlab主窗口中将当前文件夹改为F:/test:

cd F:/test;

为了能够让VC调用Matlab程序,我们可以采用将Matlab程序包装成动态链接文件DLL的形式,然后让VC调用动态链接文件,因此在Matlab中,我们需要设置一下Matlab的编译库,在Matlab主窗口中键入如下代码:

mbuild –setup

然后出现

Please choose your compiler for buildingstandalone MATLAB applications:

Would you like mbuild to locate installedcompilers [y]/n?

键入y后回车,出现

Select a compiler:

[1] Lcc-win32 C 2.4.1 inD:\PROGRA~1\MATLAB\R2010b\sys\lcc

[2] Microsoft Visual C++ 2008 SP1 inD:\Program Files\Microsoft Visual Studio 9.0

 

[0] None

 

Compiler:

由于我们是需要用VC来调用Matlab函数,因此我们选择2,回车,出现

Please verify your choices:

 

Compiler: Microsoft Visual C++ 2008 SP1

Location: D:\Program Files\Microsoft VisualStudio 9.0

 

Are these correct [y]/n?

确定,键入y后回车,出现

 

****************************************************************************

 Warning: Applications/components generated using Microsoft VisualStudio 

          2008 require that the Microsoft Visual Studio 2008 run-time     

          libraries be available on the computer used for deployment.     

          To redistribute your applications/components, be sure that the  

          deployment machine has these run-time libraries.                

 

****************************************************************************

Trying to update options file: C:\Users\张智宇\AppData\Roaming\MathWorks\MATLAB\R2010b\compopts.bat

From template:              D:\PROGRA~1\MATLAB\R2010b\bin\win32\mbuildopts\msvc90compp.bat

 

Done . . .

如果出现以上说明,则证明Matlab编译器设置成功了。接下来是生成M文件的DLL文件。

在Matlab主窗口中键入如下代码

mcc –W cpplib:MyDLL –T link:lib MyFunc.m –C

其中cpplib:后面的是需要生成文件的文件名,是自己取的,link:lib后面的MyFunc.m是转换为DLL的M文件的文件名。 -W/-T/-C是参数,具体含义可以通过mcc –help命令查看,注意参数的大小写。

Matlab编译后会在Test文件夹下生成9个文件,分别是:

mccEcxludedFiles.log

MyDLL.cpp

MyDLL.ctf

MyDLL.dll

MyDLL.exp

MyDLL.exports

MyDLL.h

MyDLL.lib

readme.txt

其中MyDLL.dll,MyDLL.lib,MyDLL.ctf,MyDLL.h是我们需要的文件,至此,Matlab方面就已经设置妥当了。

打开VC2008,新建一个工程,然后将上述四个文件复制到工程目录下。选择“工具-选项-项目和解决方案-VC++目录”,在“显示以下内容目录”里选择“包含文件”将“D:\Program Files\MATLAB\R2010b\extern\include”添加进去,然后选择“库文件”将“D:\Program Files\MATLAB\R2010b\extern\lib\win32\microsoft”添加进去,其中D:\ProgramFiles是Matlab的安装目录,可根据实际情况进行修改。

然后选择“项目-属性-配置属性-链接器-输入”,在右边“附加依赖项”一栏填入“myDLL.lib mclmcrrt.lib”,其中MyDLL.lib就是刚刚用Matlab生成的lib文件。

在编写代码时首先得包含头文件“MyDLL.h”,然后开始编写需要的代码,我为了说明问题编写了一个测试代码如下所示:

 

{

MyDLLInitialize();                            //初始化DLL动态连接文件

 

double _x[5] = {1,2,3,4,5};                //输入数组

double _y[5];                             //输出数组

 

mxArray* x = mxCreateDoubleMatrix(1, 5,mxREAL);     //创建1*5矩阵

memcpy(mxGetPr(x), (void*)_x,sizeof(_x));           //拷贝输入数据

 

mxArray *input[1] = {x};                               //将矩阵x的指针作为输入参数传递进去

mxArray *output[1];                                    //定义输出参数指针

 

mlxMyFunc(1,output,1,input);                       //调用m函数

mxArray *y;                                        //定义输出结果指针

y = output[0];                                     //将输出参数传递给输出结果

memcpy(_y, mxGetPr(y), sizeof(_y));                //拷贝输出数据

 

MyDLLTerminate();                    //结束DLL库

 

//显示数组中的数据

CString str;

str.Format("%f %f %f %f%f",_y[0],_y[1],_y[2],_y[3],_y[4]);

 

MessageBox(str);

 

}

其中MyDLLInitialize(),mlxMyFunc(),MyDLLTerminate()等函数可以在MyDLL.h中找到函数原型,mlxMyFunc函数原型为:

mlxMyFunc(int nlhs, mxArray *plhs[], intnrhs, mxArray *prhs[])

nlhs代表输出参数个数,plhs[]里面存放的是输出参数的指针,nrhs代表输入参数个数,prhs[]中存放的是输入参数的指针。上例中由于输入输出参数只有一个,因此在plhs[0]中存放的就是M文件中b的指针,prhs[0]中存放的就是M文件中a的指针。

编译运行之后就可以在弹出的消息框中得到所要的结果。将项目文件夹下生成的可执行文件复制出来,将MyDLL.dll文件、MyDLL.ctf文件和.exe文件放在同一目录下便可脱离VC++独立运行。如果需要在其他未装Matlab的机器上运行,则还需要将“D:\Program Files\MATLAB\R2010b\toolbox\compiler\deploy\win32”中的MCRInstaller.exe复制出来,在未安装Matlab的电脑上运行此程序,才可使得刚刚生成的可执行文件顺利运行。

以上程序在Windows 7 家庭普通版 + Visual Studio 2008 专业版 SP1 + Matlab R2010b下编译运行通过。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

matlab生成dll 的相关文章

  • Python爬虫市场简单分析

    Python爬虫是目前互联网行业中最重要的组成部分之一 Python作为一门易学易懂的编程语言 不需要过多的软件环境和部署条件 基本覆盖了爬虫开发的大部分需求 是网络数据爬取和处理的首选技术之一 Python通过一系列优秀的爬虫框架和库的支
  • 设计模式三: 代理模式(Proxy) -- JDK的实现方式

    简介 代理模式属于行为型模式的一种 控制对其他对象的访问 起到中介作用 代理模式核心角色 真实角色 代理角色 按实现方式不同分为静态代理和动态代理两种 意图 控制对其它对象的访问 类图 实现 JDK自带了Proxy的实现 下面我们先使用JD
  • 从零到英雄:Vue CLI 让你成为前端开发高手(一)

    前言 作者主页 雪碧有白泡泡 个人网站 雪碧的个人网站 推荐专栏 java一站式服务 前端炫酷代码分享 uniapp 从构建到提升 从0到英雄 vue成神之路 解决算法 一个专栏就够了 架构咱们从0说 数据流通的精妙之道 文章目录 前言 1
  • 学习方法小结:

    好的学习方法 好的算法 高效率学习 gt 努力学习 1 学习要有目标不能太盲目 2 笔记很重要 整理笔记更重要 3 博客 论坛的运用十分关键 从量变到质变的过程需要去坚持 4 不要忘记复习 不能太依赖老师和他人的帮助 5 多提问 善于发现问
  • Pytorch学习笔记(III)——提取特征

    目录 一 引言 二 具体步骤 1 参数模型 2 网络结构 3 参数载入 4 特征提取器 5 读取图片 三 完整代码 一 引言 深度学习在许多任务中主要充当着特征学习的作用 而学习完的特征才是后续应用的一个关键 本文将主要介绍 如何提取任意目
  • SQL查询一对多返回一条数据

    一 查询中product和product img是一对多的关系 数据库是MySQL select p id p product cost price p product trade price p product sale price p
  • Android:基本 UI 组件

    前言 组件是 Android 程序设计的基本组成单元 通过使用组件可以高效地开发 Android 应用程序 文本类组件 Android 中提供了一些与文本显示 输入相关的组件 通过这些组件可以显示或输入文字 TextView 类 用于显示文
  • 已知先序后序遍历找n种二叉树问题

    Description 二叉树是一种特殊而重要的结构 有着广泛的应用 二叉树或者是一个结点 或者有且仅有一个结点为二叉树的根 其余结点被分成两个互不相交的子集 一个作为左子集 另一个作为右子集 每个子集又是一个二叉树 遍历一棵二叉树就是按某
  • IP地址、子网掩码、默认网关和DNS服务器之间的联系与区别

    文章目录 1 IP地址 2 子网掩码 3 默认网关 4 DNS服务器 1 IP地址 IP 是32位二进制数据 通常以十进制表示 并以 分隔 IP 地址是一种逻辑地址 用来标识网络中一个个主机 IP 有唯一性 指的是公网地址 即每台机器的 I
  • 微信小程序图片显示不出来的解决方案

    调试上没有什么问题 真机ios调试也没有什么问题 但是发布体验版后 在Android上图片却不见了 显示不出来 开始以为是兼容性的问题 最后才发现其实事情并没有这么难解决 以下是可能出现的问题 1 注意在微信小程序中的图片标签是
  • Python3,5行代码,制作Gif动图,太简单了。

    gif动图制作 1 引言 2 代码实战 2 1 安装 2 2 代码 3 总结 1 引言 小屌丝 鱼哥 你能不能帮我找一个动图 小鱼 啥动图 你自己百度不就行了 小屌丝 我这不是没找到吗 不然我就自己来找了 小鱼 找不到 你就自己制作一个呗
  • 轻松打造“文生图”神器!10分钟部署Stable Diffusion

    最近一年 扩散模型太火了 已经成为重要的生产力工具 在AI研究领域也不断有新的工作出现 成为产业界和学术界的热点 本文将在趋动云平台部署扩散模型中广受关注的stable diffusion webui项目 手把手教程 创建项目 首先创建项目
  • 【网络安全】Docker部署DVWA靶机环境

    目录 前言 Docker部署 DVWA部署 仓库镜像部署DVWA 手动部署DVWA 前言 Docker很好用 DVWA更是网络安全学习当中必不可少的靶机 但是DVWA的部署实在是太过麻烦了 如果每次不小心删除虚拟机或者更新了VM之后导致虚拟
  • TCP延迟确认过长问题

    在并发环境下 tcp 确认时间过长 造成大部分时间在等待状态 造成性能降低 解决方式 网络传输设置为不需要延迟确认 分析问题 例子 假如 一次传输时间 延迟确认时间 200ms 数据传输时间 1ms 查询时间 1ms 严重超时 机器 A 输
  • (附源码)node.js-医院预约挂号系统的设计与实现 毕业设计141041

    医院预约挂号系统 摘 要 随着科学技术的飞速发展 各行各业都在努力与现代先进技术接轨 通过科技手段提高自身的优势 对于医院预约挂号系统当然也不能排除在外 随着网络技术的不断成熟 带动了医院预约挂号系统 它彻底改变了过去传统的管理方式 不仅使
  • Zabbix appliance 6.4.4 安装vmware tools

    虚拟机选择 Linux kernel4 0 32bit 点击 安装vmware tool mount dev cdrom mnt mkdir tmp vmware cd tmp vmware cp mnt yum install tar t
  • 寻址模式

    寻址模式 代码后补 立即 数 寻址 指令中的形式地址部分 不是操作数的地址 而是操作数本身 特点 指令执行阶段CPU不访问主存 而形式地址的位数限制了立即数的范围 直接寻址 指令中的形式地址部分就是操作数的实际地址 特点 在执行阶段访问了一
  • Spring JDBC(配置数据源,操作数据库)

    Java知识点总结 想看的可以从这里进入 目录 14 Spring JDBC 14 1 配置数据库资源 14 1 1 简单数据源 14 1 2 Druid连接池 14 2 JdbcTemplate 14 Spring JDBC Spring
  • git checkout 远程分支失败的问题解决

    今天git checkout b xxx origin yyy 远程分支失败了 报错 fatal Cannot update paths and switch to branch 解决方法 git fetch p 然后重新 git chec

随机推荐

  • 转:Chrome浏览器查看网站登录 Cookie 信息的方法

    当我们使用自动签到等程序的时候一般都要用到网站Cookie 我们可以借助浏览器的扩展来获取Cookie信息 但其实通过浏览器本身的功能就可以查看Cookie信息 以Chrome类浏览器为例有以下三种方法 chrome浏览器 方法一 1 打开
  • 网易笔试题 推箱子

    pre class java 时间限制 10000ms单点时限 1000ms内存限制 256MB描述推箱子是一款经典游戏 如图所示 灰色格子代表不能通过区域 蓝色方格是箱子 黑色圆形代表玩家 含有圆点的格子代表目标点 push png规定以
  • 第J2周:ResNet50V2算法实战与解析

    一 课题背景和开发环境 第J2周 ResNet50V2算法实战与解析 语言 Python3 Pytorch 本周任务 1 请根据本文TensorFlow代码 编写出相应的Pytorch代码 建议使用上周的数据测试一下模型是否构建正确 2 了
  • pytorch 中的torchsummary

    torchsummary torchsummary能够查看模型的输入和输出的形状 可以更加清楚地输出模型的结构 torchsummary summary model input size batch size 1 device cuda 功
  • 深度学习与计算机视觉系列(中)--GAN

    深度学习与计算机视觉入门系列 中 数据嗨客最近发布了一个深度学习系列 觉得还不错 主要对深度学习与计算机视觉相关内容做了系统的介绍 看了一遍 在这里做一下笔记 目录 深度学习与计算机视觉入门系列 中 目录 深度学习第6期 循环神经网络RNN
  • SpringCloud Alibaba应用

    目录 1 服务注册中心 1 1 nacos服务注册与发现 1 1 1 springcloud集成nacos服务注册中心 2 服务配置中心 2 1 nacos服务配置中心 3 远程调用 3 1 openfeign远程调用 4 网关服务 4 1
  • 手把手教你制作Jlink-OB调试器(含原理图、PCB、外壳、固件)

    文章目录 前言 硬件电路 原理图 PCB 焊接调试 待优化和改进的地方 资料下载 历史精选 前言 好久没更新博客和公众号了 感谢大家还没取关哈 好吧 我承认是我太懒了 今天分享一个福利 趁着前段时间嘉立创和捷配打价格战 一天之内 多次降价
  • pycharm 允许并行运行 运行多个文件 运行多个py文件

    pycharm 允许并行运行 运行多个文件 运行多个py文件
  • vue3.x + vite4.3构建属于自己的组件库并发布npm包

    欢迎点击领取 前端面试题进阶指南 前端登顶之巅 最全面的前端知识点梳理总结 分享一个使用比较久的 在国内的项目研发过程中 使用vue框架的项目占比很大 同样延伸出了很多非常优秀的UI组件库 比如element plus ant design
  • GPT自然语言处理模型

    GPT Generative Pre trained Transformer 是一种基于Transformer架构的自然语言处理模型 由OpenAI开发 它是目前最先进的自然语言处理模型之一 可以用于各种任务 例如文本生成 机器翻译 问答系
  • JS+CSS实现一个底部渐变波浪效果

    今天又来分享一个网页特效 自己瞎写的 类似一个波浪效果 并且有背景渐变 就叫做底部渐变波浪把 先看看效果图 实现代码 实现原理也很简单 就是使用 keyframes定义动画函数 然后对每个元素应用animation属性 设置不同的延迟播放时
  • matlab 读取某一文件夹下的文件

    MATLAB 是一个十分强大的科学计算软件 用于各种数据分析和科学计算 在实际工作和研究过程中 我们通常将数据存储在文件中 文件存在于系统的某个目录中 如果需要读取这些文件 可以使用 MATLAB 提供的文件和文件夹操作函数 本文将介绍如何
  • 一、Java基础之一——环境配置

    文章目录 1 1 JavaSE知识体系 1 2 各种语言的应用领域 1 3 Java语言跨平台原理 1 3 1Java语言特点 1 3 2 Java语言跨平台原理 1 3 3 JRE和JDK 1 4 Java环境配置 1 4 1 JDK下载
  • C#——设计一个Windows应用程序,在该程序中定义一个学生类和班级类

    设计一个Windows应用程序 在该程序中定义一个学生类和班级类 以处理每个学生的学号 姓名 语文 数学和英语3门课程的期末考试成绩 要求 1 能根据姓名查询指定学生的总成绩 2 能统计全班学生的平均成绩 3 能统计单科成绩最高分 4 能统
  • Unity处决动画实现思路

    前言 不只是处决动画 只要是需要多个动画目标配合的都可以参考下面的思路 方案一 去除掉动画的位移部分 xz 在合适的时机移动到固定的位置双方同时播放动画 比如实现下图中狼和鹿的捕猎动画 我的做法是在要开始播放处决动画之前先让狼位移到固定位置
  • 卷积相关知识

    二维图片卷积 二维卷积可以处理二维数据 nn Conv2d self in channels out channels kernel size stride 1 padding 0 dilation 1 groups 1 bias True
  • 树莓派安装教程

    1 安装raspbian操作系统 下载安装工具 Win32DiskImager 0 9 5 binary 下载 img文件 使用上述工具即可 下载前首先需要格式化SD卡 再重新写入 之后插入SD卡 即可可以看到操作系统的界面 关于解决显示屏
  • 浅记封装的antd组件: 树形下拉选择

    树形下拉选择 1 可输入搜索 2 可设置单选多选 3 父节点选择后 可以设置子节点全选 import React from react import connect from dva import TreeSelect Form from
  • NeuPhysics: Editable Neural Geometry and Physics from Monocular Videos 解读

    1 论文简介 1 将NeRF和SDF方法结合来更好的回归物体表面 mesh 2 通过在神经辐射场后嵌入可微模拟器 实现动力学参数学习和进行场景编辑 2 核心思想 上述论文包含三个模块 1 Time invariant information
  • matlab生成dll

    实验室的一个项目需要调用matlab程序 经过再三考虑 决定使用vc调用matlab导出库的形式 而我主要负责与matlab程序结合的工作 以下是今天工作的简要总结 全当是个备忘吧 1 在matlab中选择compiler 在命令行窗口输入