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

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

    1. 打开Visual Studio项目属性,进入「生成」选项卡。
    2. 将「平台目标」设置为x64,确保取消勾选「首选32位」(仅.NET Framework项目有此选项)。
    3. 保存设置后,清理并重建项目。
  • 验证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版本与位数

    1. 确认安装的MATLAB Runtime为R2019b(v97)64位,与生成程序集的MATLAB版本完全一致。
    2. 若Runtime未被自动识别,手动将以下路径添加到系统环境变量PATH:
      C:\Program Files\MATLAB\MATLAB Runtime\v97\bin\win64
      
      添加后重启Visual Studio。
  • 确认MATLAB生成环境为64位
    在生成程序集的MATLAB中执行以下命令,验证环境位数:

    disp(computer)
    

    输出应为PCWIN64,确保用此64位环境生成程序集。

  • 清理重建项目
    删除项目的bin、obj目录,移除旧的程序集引用,重新添加正确的myAssembly.dll和MWArray.dll,然后重新生成解决方案。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 10:33:19