MSVS C# Matlab的混合编程系列1 - 看似简单的问题引出

前言:

问题提出,如何把Matlab(本文简称MT)的算法集成到Visual Studio(本文简称VS)里面运行?

本文,通过编制一个MT中最简单的加法函数,我们把他做成 MSVS C#能够使用的动态库,说明了MSVS C# 和 MT集成的最小,然而,最简洁清晰的处理方法和过程。 


环境:

1 VS2019

2 C# .Net 应用环境

3 MT2019


写在前面的结论:

MT的库无论是安装版本还是Runtime,1 一定要用一致的版本 2一定要充分利用生成的移植文件,

一致版本,

  • 指的是MT的.net的框架和VSC3的.net框架版本一致,

  • 也包括MT的通用库版本比如,2019的库,和2022的库有可能不一致

  • 硬件平台设定的一致性

  • 利用MT的deploytool工具:

    • 生成动态库:
  • 在MSVS中,引入这个动态库:

  • 调用这个动态库的方法

  • 说明过程中遇到的三个容易忽视的问题:


步骤实录:

1 MATLAB中,设计一个简单的加法函数:

function result = addnum(a,b)
    result = a+b;
end

保存为add.

2 调用deploytool的库编译工具:

3 用Library Compiler进行编译:

3.1 VS C# 中选:

 3.2 可以改一名字:

 我们改成:doadd

 注意,Setting 里,路径最好改一下,否则,都到MT的路径里面去了:

路径笔者配置如下:

配置整体如下:

点击后,

会在设定目录下,生成动态库移植的所有信息,同时,还会给出,参考的测试源码,其实就是调用方法,还有生成动态库部署所需要的种种方面。

一定要充分利用生成的移植文件,

现在,我们研究一下,这些生成的文件情况,

 3.3  不同路径下生成文件对比:

先看看,在输出文件夹的三个定义,


3.3.1 Testing files 文件夹(测试文件)

 

 我们先看看,readme.txt

add MATLAB .NET Assembly (.NET Component)

1. Prerequisites for Deployment 【部署要求】

Verify that version 9.7 (R2019b) of the MATLAB Runtime is installed.   
If not, you can run the MATLAB Runtime installer.
To find its location, enter
  
    >>mcrinstaller
      
at the MATLAB prompt.
NOTE: You will need administrator rights to run the MATLAB Runtime installer. 

Alternatively, download and install the Windows version of the MATLAB Runtime for R2019b 
from the following link on the MathWorks website:

    https://www.mathworks.com/products/compiler/mcr/index.html
   
For more information about the MATLAB Runtime and the MATLAB Runtime installer, see 
"Distribute Applications" in the MATLAB Compiler SDK documentation  
in the MathWorks Documentation Center.

2. Files to Deploy and Package【部署,需要打包的文件】

-add.dll
   -contains the generated component using MWArray API. 
-addNative.dll
   -contains the generated component using native API.
-This readme file
    Note: if end users are unable to download the MATLAB Runtime using the
    instructions in the previous section, include it when building your 
    component by clicking the "Runtime included in package" link in the
    Deployment Tool.


Auto-generated Documentation Templates:【自动生成的文档模板】

MWArray.xml - This file contains the code comments for the MWArray data conversion 
              classes and their methods. This file can be found in either the component 
              distrib directory or in
              <mcr_root>*\toolbox\dotnetbuilder\bin\win64\v4.0

add_overview.html - HTML overview documentation file for the generated component. It 
                    contains the requirements for accessing the component and for 
                    generating arguments using the MWArray class hierarchy.

add.xml - This file contains the code comments for the add component classes and methods. 
                    Using a third party documentation tool, this file can be combined 
                    with either or both of the previous files to generate online 
                    documentation for the add component.


3. Resources【需要的资源】

【案,MWArray 在做加法运算的时候使用了,这里从哪里获取MWArray 的正确版本,也以后集成 其他库必要考虑的问题】

To learn more about:               See:
===================================================================
MWArray classes                    <matlab_root>*\help\toolbox\
                                   dotnetbuilder\MWArrayAPI\
                                   MWArrayAPI.chm  
Examples of .NET Web Applications  Web Deployment in the MATLAB   
                                   .NET Assembly documentation in the  
                                   MathWorks Documentation Center


4. Definitions

For information on deployment terminology, go to
https://www.mathworks.com/help and select MATLAB Compiler >
Getting Started > About Application Deployment >
Deployment Product Terms in the MathWorks Documentation
Center.

* NOTE: <mcr_root> is the directory where the MATLAB Runtime is installed on the target 
        machine.
        <matlab_root> is the directory where MATLAB is installed on the target machine.

 3.3.2 EndUser 文件夹(终端用户文件)

 里面就是真正需要加到MSVC C# 中去的动态库。

 

 

装完以下文件 


4 构建一个C#的项目,调用我们的MT的动态库:

4.1 构建一个窗体项目:

 【案,】框架的兼容性和MT一定要一致,否则,必出错!

4.2 设定一个Button,来触发MT动态库的调用

4.3 确保你的目标框架和MT是兼容的:

4.4 引入编好的动态库:

 

4.5 配置好你 编译平台,X64大多数情况下:

5  插入调用dll库的代码:       

using MathWorks.MATLAB.NET.Arrays;
using add; // 这里改成你的库名,我们刚才编译的加法库
using MathWorks.MATLAB.NET.Utility;

6 运行结果展示:

 


 可能遇到的问题:

1 兼容性问题:

1.1 框架兼容:

MT2019,在生成动态库的时候,下方有 .net 框架的说明,如下:

点击后,会有如下的一段GUIDE说明,

 错误信息:

末经处理的异常
始但攻正坝51友并吊。
第1个内部异常(共3 个》TypelnitializationException:“MathWorks.MATLAB.NET.Utility.MWMCR”的类型初始值设定项引发异常。

 

1.2 MT 的通用动态库的兼容性:例如:MWArray.dll

MWArray.dll,

笔者之前用的是MT runtime的库,这样运行的时候总报错,然后,改成MT安装时候的安装目录下的库,就可以了。

2 项目引入的库不兼容:

这个在比较复杂的MT库里面,经常出现。

3 编译前没有执行清扫:

项目引入新的库,但是,项目编译前没有执行清扫的任务:

出错信息:

TypelnitializationException:“MathWorks.MATLAB.NET.Arravs.MWArray”的类型初始值设定项引发异常。


参考: 

 C#中调用MATLAB执行MATLAB代码_c#连接matlab connecting to matlab unknown_matlab-CSDN博客


源码:

本例项目工程源码已经上传,可在我的资源下载。 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Adobe全新AI驱动的Premiere Pro功能消除了枯燥的音频编辑任务

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

亚信安慧AntDB数据库:开辟数据库新纪元

在数字化时代的快速发展中&#xff0c;数据成为企业的核心资产&#xff0c;而数据库则是管理和利用这些数据的关键。 为满足企业日益复杂的混合负载场景和混合数据类型业务需求&#xff0c;亚信科技AntDB提出了全新的“超融合”理念。该理念将多引擎、多能力融合在一起&#x…

Docker(二)安装指南:主要介绍在 Linux 、Windows 10 和 macOS 上的安装

作者主页&#xff1a; 正函数的个人主页 文章收录专栏&#xff1a; Docker 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01; 安装 Docker Docker 分为 stable test 和 nightly 三个更新频道。 官方网站上有各种环境下的 安装指南&#xff0c;这里主要介绍 Docker 在…

Java进阶-Tomcat发布JavaWeb项目

对于云服务器&#xff0c;程序员一般不会陌生&#xff0c;如果项目需要发布到现网&#xff0c;那么服务器是必不可缺的一项硬性条件&#xff0c;那么如何在云服务器上部署一个项目&#xff0c;需要做哪些配置准备&#xff0c;下面就由本文档为大家讲解&#xff0c;本篇以Tomcat…

windows vscode jsoncpp cmake c++ 构建项目

jsoncpp的编译和使用推荐文章&#xff1a;jsoncpp的编译和使用 | 爱编程的大丙 (subingwen.cn)https://www.subingwen.cn/cpp/jsoncpp/从这个链接下载jsoncpp-master&#xff1a;https://github.com/open-source-parsers/jsoncpp 可以把这个文件夹名字改成jsoncpp&#xff0c;…

街机模拟游戏逆向工程(HACKROM)教程:[10]68K汇编add指令

我们之前已经介绍了move指令&#xff0c;从本章开始&#xff0c;我们会一步步介绍更多的M68K指令。 简介&#xff1a; add :加法指令 该指令的作用是[源操作数]加[目的操作数]&#xff0c;结果传递至[目的操作数]&#xff0c;[源操作数]保持不变。 例子&#xff1a;…

MySQL复合查询 内外连接

目录 前言&#xff1a; 多表查询&#xff1a; 显示部门号为10的部门名&#xff0c;员工名和工资 : 显示各个员工的姓名&#xff0c;工资&#xff0c;及工资级别: 自连接 显示员工FORD的上级领导的编号和姓名(mgr是员工领导的编号&#xff09; 子查询 单行子查询&#…

汽车微电机行业研究:预计2029年将达到188亿美元

微电机行业是技术密集型行业&#xff0c;其起源于欧洲的德国、瑞士等国家&#xff0c;发展于日本。随着改革开放&#xff0c;中国作为发展中国家&#xff0c;承接了德国、日本等发达国家的汽车微电机产业转移&#xff0c;技术扩散逐步向我国转移。 微特电机广泛应用于信息处理设…

[Python] 如何通过ctypes库来调用C++ 动态库 DLL?

ctypes库介绍 ctypes是Python的一个外部库,它提供了一种灵活的方式来调用C语言的动态链接库(DLL)或共享库(SO)。通过ctypes,我们可以在Python中直接调用C语言编写的函数和变量,从而实现跨语言的互操作。 ctypes 它提供了与 C 兼容的数据类型,并允许调用 DLL 或共享库中的…

数学建模美赛资料(赛题+获奖论文更新)

数学建模美赛历年真题可以帮助我们了解比赛的出题思路&#xff0c;对建模比赛有一个大致的了解。 在备赛过程中&#xff0c;通过往年真题&#xff0c;我们可以了解考试的范围和重点&#xff0c;做到心中有数&#xff0c;可以有的放矢。通过真题&#xff0c;我们可以感受到各个…

Java 方法(方法的调用机制、方法的传参机制)

方法 方法就是将一个功能抽取出来&#xff0c;把代码单独定义在一个大括号内&#xff0c;形成一个单独的功能。 当需要这个功能的时候&#xff0c;就可以去调用。这样即实现了代码的复用性&#xff0c;也解决了代码冗余的现象。 修饰符 返回值类型 方法名 &#xff08;参数列…

CC工具箱使用指南:【计算面积】

一、简介 在Arcgis中&#xff0c;如果要计算面要素的面积&#xff0c;有几种方法。 1、gdb数据会自带一个shape_area字段&#xff0c;这就是面的平面面积&#xff0c;单位是平方米&#xff1a; 2、在双精度字段上右键单击&#xff0c;在弹出的菜单中点击【计算几何】&#xf…

制造业企业数字化转型难点剖析及解决之法

导语 全球正在由工业经济向数字经济转型过渡&#xff0c;制造业正在且并将长期处于数字化转型发展阶段&#xff0c;并沿着数字化、网络化、智能化阶段不断跃升。但如何找准数字化转型的切入点&#xff0c;以低耗能、低成本、高效率的方式加快制造业转型升级的步伐&#xff0c;仍…

普兰资产(PLAN B KRYPTO ASSETS):Schutz AI 公链引领数字资产新时代

比特B ETF是金融技术革命的起始 普兰资产&#xff08;PLAN B KRYPTO ASSETS&#xff09;执行长Jonah Fischer指出&#xff0c;比特B ETF 仅是迈向金融领域技术革命的首个阶段。他认为比特B现货 ETF 提供了投资者接触年轻且具有风险性的资产的途径&#xff0c;但他强调区块链技术…

Linux自动化构建工具——make和Makefile使用详解

一、初步认识make和Makefile 我们首先需要知道的是&#xff0c;make是一个命令&#xff0c;Makefile是一个文件&#xff0c;Makefile中包含了依赖关系和依赖方法。 从上面的文件以及指令中我们可以看到&#xff0c;我们可以在Makefile文件中写入依赖关系以及对应的依赖方法&…

2024执业医师考试报名流程及上传照片要求详解

2024年执业医师和助理医师考试的报名工作将于1月22日正式启动&#xff0c;报名截止日期为2月4日。建议考生尽早报名&#xff0c;以避免在报名截止日期临近时出现拥挤情况。您可根据本文介绍&#xff0c;提前准备好报名所需资料、证件照电子版和相关证明材料&#xff0c;并了解报…

【我与Java的成长记】之多态,重载与重写详解

系列文章目录 能看懂文字就能明白系列 C语言笔记传送门 Java笔记传送门 &#x1f31f; 个人主页&#xff1a;古德猫宁- &#x1f308; 信念如阳光&#xff0c;照亮前行的每一步 文章目录 系列文章目录&#x1f308; *信念如阳光&#xff0c;照亮前行的每一步* 前言一、多态的概…

米贸搜|Facebook新手请查收!如何在FB上定位到B类受众?

一、确定目标受众和营销目标 在利用Facebook进行获客之前&#xff0c;B2B企业需要首先明确目标受众和营销目标。目标受众是指潜在的客户或合作伙伴&#xff0c;而营销目标可能是增加销量、提高品牌知名度、获取客户线索等。 Facebook的受众定位可以分成三大类&#xff1a;人口…

Netty通信中的粘包半包问题(五)

这期我们来分析下消息头消息体的这种方式来实现完美的解决方案&#xff0c;当然这也是最复杂的一种实现&#xff0c;因为在大多数场景中&#xff0c;性能和复杂度始终不能兼得。代码中使用了MessagePack的第三方序列化&#xff0c;因为我们要传输的实体类对象在客户端和服务端之…

从matlab的fig图像文件中提取数据

这里用的是openfig&#xff08;&#xff09;函数打开的fig文件 →→→【matlab 中 fig 数据提取】 很简洁 →→→【MATLAB提取 .fig 文件中的数据】 这个给出了包含多个曲线的情况 →→→【提取matlab fig文件里的数据和legend】 chatgpt给出的方法 打开fig文件并保存数据 我的…
最新文章