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

news/2024/6/17 18:01:25 标签: matlab, c#, 开发语言, 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.niftyadmin.cn/n/357745.html

相关文章

实时互动下视频 QoE 端到端轻量化网络建模

在实时视频互动中&#xff0c;影响观众对视频体验的有较多且复杂的因素&#xff0c;包括&#xff1a;画质、流畅度以及与其耦合的观看设备等。传统客观算法会利用网络传输或编解码参数拟合接收端人的感知体验&#xff0c;或者使用图像质量结合其他相关参数拟合实时视频质量。由…

Python之将日志写入到文件(二十八)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

AutoAI 2023峰会观察:数据驱动变革,迎接智驾未来

在驶向智驾未来的科技之路上&#xff0c;数据正在发挥什么样的重要作用&#xff1f; AutoAI 2023中国峰会盛大召开 近日&#xff0c;AutoAI 2023第六届无人驾驶及智能驾舱中国峰会在上海盛大召开&#xff0c;AutoSec 7周年年会暨中国汽车网络安全与数据安全合规峰会也于同期一起…

移动端浏览器性能优化探索

在移动端的页面开发过程中&#xff0c;我们经常提及页面性能优化、消除页面卡顿的话题&#xff0c;如何确定优化策略&#xff0c;我们首先应当对页面卡顿的行为有所认知。 前言 &#xfeff; 页面的卡顿现象可以比较明确的分为三个类型&#xff0c;分别是 “画面撕裂” 、“丢帧…

LeetCode 2451. 差值数组不同的字符串

【LetMeFly】2451.差值数组不同的字符串 力扣题目链接&#xff1a;https://leetcode.cn/problems/odd-string-difference/ 给你一个字符串数组 words &#xff0c;每一个字符串长度都相同&#xff0c;令所有字符串的长度都为 n 。 每个字符串 words[i] 可以被转化为一个长度…

Linux :: 【基础指令篇 :: 用户管理(补充):(4)】::用户切换

前言&#xff1a;本篇是 Linux 基本操作篇章的内容&#xff01; 笔者使用的环境是基于腾讯云服务器&#xff1a;CentOS 7.6 64bit。 目录索引&#xff1a; 1. 基本语法 2. 基本用法 3. 注意点 4. 补充&#xff1a;切换用户操作实例测试 5. 相关文章或系列推荐 借助&am…

《Kali渗透基础》03. 被动信息收集

kali渗透 1&#xff1a;被动信息收集1.1&#xff1a;收集内容1.2&#xff1a;信息用途 2&#xff1a;域名信息收集2.1&#xff1a;nslookup2.1.1&#xff1a;命令参数2.1.2&#xff1a;示例 - 命令行2.1.3&#xff1a;示例 - 交互式 2.2&#xff1a;dig2.2.1&#xff1a;命令参…

Java内部类(成员内部类、局部内部类、静态内部类、匿名内部类)

目录 ①. 什么是内部类 ②. 内部类的共性 ③. 为什么需要内部类 ④. 成员内部类 ⑤. 局部内部类 ⑥. 静态内部类&#xff08;嵌套类&#xff09; ⑦. 匿名内部类 ①. 什么是内部类 内部类是指在一个外部类的内部再定义一个类。内部类作为外部类的一个成员&#xff0c;并…