当前位置: 首页 > news >正文

C# 调用Matlab打包的 DLL文件(傻瓜式操作)

1、准备Matlab代码

在这里插入图片描述

2. 打包

  • 在matlab命令行窗口输入deploytool,打开MATLAB Complier,选择Library Compiler
    在这里插入图片描述

  • TYPE中选择.NET Assembly;在EXPORTED FUNCTIONS中选择要打包的文件;可以选择为自己打包的文件自定义NameSpace名称,本例中将NameSpace定义为JudgeByCC,然后选择Package即可。稍等一会,即可看到打包后的文件。

  • 在这里插入图片描述
    在这里插入图片描述

  • 打包结束后,会自动打开输出文件的目录,如下图所示,打开for_redistribution_files_only文件夹,即可看到打包好的dll文件。
    在这里插入图片描述
    在这里插入图片描述

3. 新建C# 控制台项目

  • 在Virual Studio中新建C#控制台项目
    在这里插入图片描述
  • 项目建好后,首先在主函数里面打印一句Hello World!,确保新建的项目能正常运行。
    在这里插入图片描述

4. 配置

  • 双击项目的Properties或者右键项目,选择属性,选择引用路径,添加自己打包好的dll文件和Matlab中MWArray.dll的文件目录,然后记得按Ctrl+s进行保存。
    在这里插入图片描述
  • 右键引用,选择添加引用,打开引用管理器。
    在这里插入图片描述
  • 在引用管理器中选择自己打包的DLL文件和MWArray,然后点击确定。 至此,C#项目配置的环境就结束了。
    在这里插入图片描述

5. 编写测试代码并运行

  • 编写测试代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using JudgeByCC;
using MathWorks.MATLAB.NET.Arrays;namespace ConsoleApp5
{internal class Program{static void Main(string[] args){Console.WriteLine("Hello World!");JudgeByCC.Class1 class1 = new JudgeByCC.Class1();// 只显示部分数据double[] array = { 1.1965, -0.548, 0.0155, 0.317, -3.462, 1.5475, 2.1625, 2.14, 0.733, 1.2965, -3.7535 };MWNumericArray myArray  = new MWNumericArray(array); // double数组转为MWArray类型数组MWArray[] dpsdo = new MWArray[1];dpsdo[0] = 12;// 测试运行效率for(int i=0; i < 10000; i++){Console.WriteLine(class1.main_entrance_JudgeByCC(myArray, dpsdo[0]));Console.WriteLine("代码执行成功!" + i);}Console.WriteLine("代码执行成功!");}}
}
  • 运行
    在这里插入图片描述

可能会遇到的问题及解决方案

未经处理的异常: System.TypeInitializationException: “JudgeByCC.Class1”的类型初始值设定项引发异常。 —> System.TypeInitializationException: “MathWorks.MATLAB.NET.Utility.MWMCR”的类型初始值设定项引发异常。 —> System.TypeInitializationException: “MathWorks.MATLAB.NET.Arrays.MWArray”的类型初始值设定项引发异常。 —> System.BadImageFormatException: 试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)
在 MathWorks.MATLAB.NET.Arrays.MWArray.mclmcrInitialize2(Int32 primaryMode)
在 MathWorks.MATLAB.NET.Arrays.MWArray…cctor()
— 内部异常堆栈跟踪的结尾 —
在 MathWorks.MATLAB.NET.Utility.MWMCR…cctor()
— 内部异常堆栈跟踪的结尾 —
在 JudgeByCC.Class1…cctor()
— 内部异常堆栈跟踪的结尾 —
在 JudgeByCC.Class1…ctor()
在 ConsoleApp5.Program.Main(String[] args) 位置 F:\VS_project\ConsoleApp5\Program.cs:行号 18

在这里插入图片描述
如果在代码运行时出现上图中的错误,如果确定自己的Matlab代码、打包、以及调用都没有问题,则有可能是自己电脑运行的目标平台环境不一致所导致的。具体修改方式如下:

解决方案:

  1. 右键 项目-> 选择“属性”
    在这里插入图片描述
  2. 点击“生成”->“目标平台”
    在这里插入图片描述
  3. 根据自己的运行环境选择合适的位数即可,笔者使用的是X64系统,故选择x64即可。然后按“ctrl+s”进行保存即可。再次运行,发现代码即可正常运行,至此,问题解决。
    在这里插入图片描述
    在这里插入图片描述
http://www.lryc.cn/news/70470.html

相关文章:

  • 微信小程序学习实录3(环境部署、百度地图微信小程序、单击更换图标、弹窗信息、导航、支持腾讯百度高德地图调起)
  • 【面试题】中高级前端工程师都需要熟悉的技能--前端缓存
  • 小红书数据分析:首播卖6亿,小红书直播开启新纪元!
  • Weex中,关于组件的水平排列竖直排列居中对齐居左对齐居右对齐低部对齐顶部对齐布局对齐说明
  • 服务(第二十八篇)rsync
  • Vue 3 第二十五章:插件(Plugins)
  • Android 系统内的守护进程 - main类服务(3) : installd
  • 华为OD机试真题 Java 实现【对称字符串】【2023Q2 200分】
  • day18文件上传下载与三层架构思想
  • Async/await详解
  • Mysql基础 — DDL、DML、DQL、DCL、函数、约束
  • 中国移动董宁:深耕区块链的第八年,我仍期待挑战丨对话MVP
  • AI孙燕姿项目实现
  • 传统机器学习(六)集成算法(2)—Adaboost算法原理
  • 性能优化常用的技巧,你都知道吗?
  • 机器学习——损失函数(lossfunction)
  • 小航助学2022年NOC初赛图形化(小高组)(含题库答题软件账号)
  • 软考中级数据库系统工程师-第6-7章 数据库技术基础关系数据库
  • 掌握RDD算子2
  • ORACLE-SQL性能优化(3)
  • 3年外包裸辞,面试阿里、字节全都一面挂,哭死.....
  • JavaEE(系列16) -- 多线程(信号量与CountDownLatch)
  • Tomcat配置https协议证书-阿里云,Nginx配置https协议证书-阿里云,Tomcat配置https证书pfx转jks
  • 抖音定位基本原理
  • 【Hbase 05】Hbase表的设计原则与优化方案
  • 行业报告 | 2022文化科技十大前沿应用趋势(上)
  • 实现BIM的Revit软件学习资料
  • 09 集合框架2
  • 相见恨晚的5款良心软件,每款都是经过时间检验的精品
  • AI与税务管理:新技术带来的新机遇和新挑战