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),同样会出现架构不兼容问题。
解决步骤:
- 打开C#项目的属性窗口,切换到【生成】选项卡。
- 在【平台目标】下拉菜单中,选择与MATLAB版本一致的架构:
- 64位MATLAB选
x64;32位MATLAB选x86。
- 64位MATLAB选
- 重新编译C#项目后运行即可。
额外注意事项:
- 需确保电脑已安装对应架构的MATLAB Runtime,版本与MATLAB 2022a匹配。
- 确认引用的MATLAB.NET相关程序集(如
MathWorks.MATLAB.NET.Arrays.dll)的架构与项目设置一致。
内容的提问来源于stack exchange,提问作者Alireza Ghaderi
相关产品推荐
相关产品推荐

