Matlab 2019b 64位生成.NET组件在VS2022中引发格式异常求助
MATLAB .NET程序集加载BadImageFormatException问题解决
问题背景
使用64位MATLAB 2019b生成.NET程序集,在Visual Studio 2022的64位.NET 4.8应用中调用时,无论实例化MATLAB生成的类还是创建MWArray对象,均抛出BadImageFormatException,提示程序格式错误,异常链指向MWMCR和MWArray的类型初始化失败。
相关代码与操作
- MATLAB脚本:
function [SNR, PhaseNoise] = Measure_SNR_w_SBX(FullName, FigurePath) close all %%Do something with data in file FullName, calculate SNR, PhaseNoise and %%create a file FigurePath img end
- 生成程序集命令:
mcc -W 'dotnet:myAssembly,myClass' -T link:lib Measure_SNR_w_SBX.m
- .NET包装方法(部分):
public void Measure_SNR_w_SBX(in string FullName, in string FigurePath, out double SNR, out double PhaseNoiseMean) { MWCharArray mwFullName = new MWCharArray(FullName); MWCharArray mwFigurePath = new MWCharArray(FigurePath); MWNumericArray output = obj.Measure_SNR_w_SBX(2, mwFullName, mwFigurePath); SNR = output[0].ToScalarDouble(); PhaseNoiseMean = output[1].ToScalarDouble(); }
- 核心异常信息:
System.TypeInitializationException: 'The type initializer for 'myAssembly.myClass' threw an exception.' 内部异常: TypeInitializationException: The type initializer of 'MathWorks.MATLAB.NET.Utility.MWMCR' threw an exception. TypeInitializationException: The type initializer of 'MathWorks.MATLAB.NET.Arrays.MWArray' threw an exception. BadImageFormatException: Attempt to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)
解决步骤
强制项目平台为x64
- 打开Visual Studio项目属性,进入「生成」选项卡。
- 将「平台目标」设置为x64,确保取消勾选「首选32位」(仅.NET Framework项目有此选项)。
- 保存设置后,清理并重建项目。
验证MWArray.dll的位数与版本
确保引用的MWArray.dll是64位R2019b版本,路径为:C:\Program Files\MATLAB\MATLAB Runtime\v97\toolbox\dotnetbuilder\bin\win64\v4.0\MWArray.dll切勿引用
Program Files (x86)目录下的32位版本。匹配MATLAB Runtime版本与位数
- 确认安装的MATLAB Runtime为R2019b(v97)64位,与生成程序集的MATLAB版本完全一致。
- 若Runtime未被自动识别,手动将以下路径添加到系统环境变量
PATH:
添加后重启Visual Studio。C:\Program Files\MATLAB\MATLAB Runtime\v97\bin\win64
确认MATLAB生成环境为64位
在生成程序集的MATLAB中执行以下命令,验证环境位数:disp(computer)输出应为
PCWIN64,确保用此64位环境生成程序集。清理重建项目
删除项目的bin、obj目录,移除旧的程序集引用,重新添加正确的myAssembly.dll和MWArray.dll,然后重新生成解决方案。
内容的提问来源于stack exchange,提问作者weirdgyn
相关产品推荐
相关产品推荐

