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

news/2025/3/5 2:19:37/

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.ppmy.cn/news/82381.html

相关文章

【SCI征稿】CCF推荐|Springer旗下2区无线网络类SCI, 2个月左右录用~

一、【期刊简介】 JCR2区无线网络类SCI 【期刊概况】IF: 2.0-3.0&#xff0c;JCR2/3区&#xff0c;中科院4区&#xff1b; 【终审周期】走期刊系统&#xff0c;3个月左右录用; 【检索情况】SCI&EI双检&#xff1b; 【数据库收录年份】1967年&#xff1b; 【自引率】11…

基于ESP32 CAM的人脸识别考勤系统

概述:使用 ESP32 CAM 的人脸识别考勤系统 本教程介绍了使用ESP32 CAM 模组的人脸识别考勤系统。我们将为此应用程序使用OpenCV和Visual Studio 。OpenCV 是一个开源的图像处理库,不仅在工业界而且在研发领域都得到了非常广泛的应用。Visual Studio 是Microsoft为不同类型的软…

SSD202 Linux开发日志记录

一、挂载U盘 SDK默认自动加载USB存储模块&#xff0c;但没有自动挂载&#xff0c;插上U盘后识别sda mount /dev/sda /mnt/即可在/mnt查看U盘文件 二、make & make menuconfig提示失败 打开新终端后输入 declare -x ARCH"arm" declare -x CROSS_COMPILE"…

NVIDIA_Tesla_V100_PCIe_32GB加速卡详细参数

记录了NVIDIA_Tesla_V100_PCIe_32GB加速卡的详细参数 参考链接: https://www.xincanshu.com/gpu/NVIDIA_Tesla_V100_PCIe_32_GB/canshu.html 主要参数 参数值描述核心频率1230 MHz核心 一秒内能够进行多少处理周期Turbo频率1380 MHz突发加速频率&#xff0c;类似于CPU睿频流处…

Prometheus如何优化远程读写的性能

Prometheus如何优化远程读写的性能 场景 为了解决prometheus本地存储带来的单点问题&#xff0c;我们一般在高可用监控架构中会使用远程存储&#xff0c;并通过配置prometheus的remote_write和remote_read来对接 远程写优化&#xff1a;remote_write 用户可以在Prometheus配…

数据仓库理论

数据仓库理论 基础理论数据仓库主要特征面相主题集成性非易失性、非易变性时变性 OLTP、OLAPOLTPOLAP对比 数据库与数据仓库的区别数据仓库、数据集市数据仓库分层架构分层思想和标准阿里巴巴数仓三层架构ODS层DW层DA层&#xff08;ADS层&#xff09; 分层的好处好处 ETL和ELT的…

带你深入了解 AsyncTask

AsyncTask 是 Android 中用于处理后台任务和主线程交互的类。它提供了一种简单的方式来在后台执行耗时操作&#xff0c;并在操作完成后更新用户界面。下面是 AsyncTask 的优点和缺点的详细解释&#xff1a; 优点&#xff1a; 简单易用&#xff1a;AsyncTask 提供了一个简单的编…

使用Qt Creator编写窗体程序并打包发布

1、设置编辑器显示语言为中文(个人习惯) 2、新建窗体应用程序 3、简单修改一下代码 3.1 双击ui文件进入设计模式 3.2 从左侧组件中直接将需要使用的组件拖拽到窗体中 3.3 添加槽函数 选中按钮&#xff0c;右键菜单中 点击 转到槽&#xff0c;头文件和.cpp文件会自动添加对…