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.hqwc.cn/news/414492.html

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

相关文章

GO基础进阶篇 (十四)、Http编程

Web基础概念 web应用程序 web程序可以提供浏览器访问的程序。Web应用程序通常采用客户端-服务器模型。客户端是用户使用的Web浏览器或其他Web客户端&#xff0c;而服务器是存储和处理数据的远程计算机。 我们能访问到的任何一个页面或资源&#xff0c;都存在于世界的某一个角落…

css 居中方式

居中分为水平居中和垂直居中 1. 水平居中1.1 文字text-align:center;1.2 盒子1.2.1&#xff1a;inline-block text-align 一 center;1.2.2&#xff1a;absolutetransform 一 父元素 display:relative;子元素 display:absolute; left:50%;transform: translatex(-50%);1.2.3&a…

Git教程学习:03 记录每次更新到仓库

文章目录 1 检查当前文件状态2 跟踪新文件3 暂存已修改的文件4 状态简览5 忽略文件6 查看已暂存和未暂存的修改7 提交更新8 跳过使用暂存区域9 移除文件10 移动文件 现在我们的机器上有了一个 真实项目 的 Git 仓库&#xff0c;并从这个仓库中检出了所有文件的 工作副本。 通常…

git设置代理

git设置代理 git config --global http.proxy 127.0.0.1:7890git查询代理 git config --global http.proxy git取消代理 git config --global --unset http.proxy

揭开UI设计的神秘面纱:如何打造一款让用户爱不释手的移动APP

文章目录 一、目标用户分析二、设计风格和色彩搭配三、布局和导航设计四、交互设计五、视觉元素设计六、响应式设计七、测试和优化八、持续更新和迭代九、团队协作和沟通十、学习和成长《移动APP UI设计与制作(微课版)》编辑推荐内容简介目录 《Flutter入门经典&#xff08;移动…

matlab simulink 7自由度横向车辆模型

1、内容简介 略 32-可以交流、咨询、答疑 2、内容说明 图一.七自由度车辆动力学模型 纵向力平衡方程&#xff1a; ① 侧向力平衡方程&#xff1a; ② 绕Z轴力矩平衡方程&#xff1a; ③ 四个车轮的力矩平衡方程&#xff1a; ④ 上述方程中&#xff1a;δ为前轮转角&#x…

官宣!Meta正在训练Llama 3,将继续开源

1月19日&#xff0c;全球社交、科技巨头Meta的联合创始人兼首席执行官-Zuck&#xff08;扎克伯格&#xff09;在is宣布&#xff0c;正在训练Llama 3并且以负责任地方式继续开源。 Zuck表示&#xff0c;预计到2024年底&#xff0c;Meta将拥有350,000块H100&#xff0c;如果算上…

PyTorch各种损失函数解析:深度学习模型优化的关键(1)

目录 详解pytorch中各种Loss functions binary_cross_entropy 用途 用法 参数 数学理论 示例代码 binary_cross_entropy_with_logits 用途 用法 参数 数学理论 示例代码 poisson_nll_loss 用途 用法 参数 数学理论 示例代码 cosine_embedding_loss 用途 …

数据结构--串

本文为复习的草稿笔记&#xff0c;&#xff0c;&#xff0c;有点乱 1. 串的基本概念和基本操作 串是由零个或多个字符组成的有限序列 2. 串的存储结构 3.串的应用 模式匹配 BF算法&#xff08;简单匹配算法 穷举法 算法思路&#xff1a;从子串的每一个字符开始依次与主串…

卷积神经网络和深度神经网络的区别与联系

DNN是指深度神经网络&#xff0c;它是一个很广的概念&#xff0c;某种意义上CNN、RNN、GAN等都属于其范畴之内。DNN与CNN&#xff08;[卷积神经网络&#xff09;的区别是DNN特指全连接的神经元结构&#xff0c;并不包含卷积单元或是时间上的关联。其中最初的神经网络的所有隐含…

尚硅谷Nginx高级配置笔记

写在前面&#xff1a;本笔记是学习尚硅谷nginx可成的时候的笔记&#xff0c;不是原创&#xff0c;如有需要&#xff0c;可以去官网看视频&#xff0c;以下是pdf文件 Nginx高级 第一部分&#xff1a;扩容 通过扩容提升整体吞吐量 1.单机垂直扩容&#xff1a;硬件资源增加 云…

基于Java SSM框架实现中学校园网站管理系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现中学校园网站管理系统演示 摘要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所认…