You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MATLAB函数生成DLL后在C#中调用报错的原因排查

问题描述

我在MATLAB中编写了如下乘法函数:

function [z] = zarb(a, b)
z = a * b;
end

将该函数编译为DLL并添加到C#项目引用后,使用以下C#代码调用:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using MathWorks.MATLAB.NET.Arrays;
using zarb;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Class1 m = new Class1();
            int a = Convert.ToInt32(textBox1.Text);
            int b = Convert.ToInt32(textBox2.Text);
            MWArray n1 = a;
            MWArray n2 = b;
            MWArray javab;
            javab = m.zarb(n1, n2);
            MessageBox.Show(Convert.ToString(javab));
        }
    }
}

运行时抛出以下错误:

System.TypeInitializationException: 'The type initializer for 'zarb.Class1' threw an exception.
BadImageFormatException: An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)

我的MATLAB版本为2022a,.NET版本为4.7,请问该报错的原因是什么?

错误原因及解决方案

这个报错的核心原因是32位/64位程序架构不匹配,具体场景如下:

  • MATLAB 2022a默认是64位版本,编译生成的DLL也为64位;如果你的C#项目平台目标设置为32位(x86),64位DLL无法在32位进程中加载,就会触发该错误。
  • 若你安装的是32位MATLAB,编译出32位DLL,但C#项目设置为64位(x64),同样会出现架构不兼容问题。

解决步骤:

  1. 打开C#项目的属性窗口,切换到【生成】选项卡。
  2. 在【平台目标】下拉菜单中,选择与MATLAB版本一致的架构:
    • 64位MATLAB选x64;32位MATLAB选x86。
  3. 重新编译C#项目后运行即可。

额外注意事项:

  • 需确保电脑已安装对应架构的MATLAB Runtime,版本与MATLAB 2022a匹配。
  • 确认引用的MATLAB.NET相关程序集(如MathWorks.MATLAB.NET.Arrays.dll)的架构与项目设置一致。

内容的提问来源于stack exchange,提问作者Alireza Ghaderi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 15:42:40