System.BadImageFormatException 异常,Message=试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)

C#与Halcon联编打开一个窗口显示图片:

提示:这里简述项目相关背景:

该项目主要是通过VS使用C#进行窗口界面封装,算法使用Halcon的算子。

具体实现环境

软件版本
VisualStudio2022
HalconHDevelop 20.11 Steady - MVTec HALCON

问题描述

提示:这里描述项目中遇到的问题:

在调试时,项目报错,报错代码定位具体如下,并且为了避免大家看不懂,做出注释为每一句代码。

// 定义一个公开的无返回值的方法,用于打开一个新窗口  
public void OpenWindow()  
{  
    // 定义两个长整型变量,用于存储窗口的行和列位置(但这里它们都被初始化为0,表示窗口将位于屏幕的左上角)  
    long m_lWindowRow = 0, m_lWindowColumn = 0;  
  
    // 将pictureBox1的句柄赋值给Farther_windowHandle变量。
    //注意:这里创建了一个窗口控件;通常用于将新窗口与Windows控件(如PictureBox)相关联
    HTuple Farther_windowHandle = this.pictureBox1.Handle;  
  
    // 使用Halcon的HOperatorSet类来设置新窗口的背景颜色为蓝色  
    HOperatorSet.SetWindowAttr("background_color", "blue");  
  
    // 使用Halcon的HOperatorSet类来打开一个新窗口。这里传入了多个参数:  
    // m_lWindowRow, m_lWindowColumn: 窗口的左上角位置(由于都为0,所以窗口将位于屏幕的左上角)  
    // (HTuple)this.pictureBox1.Width, (HTuple)this.pictureBox1.Height: 窗口的宽度和高度,与pictureBox1的尺寸相同  
    // Farther_windowHandle: 与新窗口关联的Windows控件句柄  
    // "visible": 表示窗口是否可见(但注意,这里后面跟了一个空格,这可能是个错误或特殊格式要求)  
    // " ": 特殊格式要求,通常这里不需要参数  
    // out MainUI_Camera_WindowsID: 输出参数,用于存储新窗口的ID  
    HOperatorSet.OpenWindow(m_lWindowRow, m_lWindowColumn, (HTuple)this.pictureBox1.Width, (HTuple)this.pictureBox1.Height, Farther_windowHandle, "visible", " ", out MainUI_Camera_WindowsID);  
}

原因分析:

提示:这里是问题的分析:

System.BadImageFormatException 异常通常意味着尝试加载的程序集(如 DLL 文件)与当前运行的应用程序不兼容。在你提供的上下文中,这个异常与 HalconDotNet 库有关,这是 HALCON 图像处理库的 .NET 封装。

这个异常可能由以下几个原因引起:

  • 位数不匹配:

     如果你的应用程序是 32 位的,而你尝试加载的 HALCON DLL 是 64 位的,或者反过来,这将会导致 BadImageFormatException。你需要确保你的应用程序和 HALCON DLL 都是相同的位数(32 位或 64 位)。
    
  • 依赖项问题:

     HALCON DLL 可能依赖于其他 DLL,如果这些依赖项没有被正确安装或版本不匹配,也可能导致此异常。
    
  • 损坏的 DLL:

     如果 HALCON DLL 文件损坏,也可能导致加载失败。
    
  • 配置问题:

     在某些情况下,如果你的应用程序没有正确地设置其环境变量或路径,也可能导致 DLL 加载失败。
    

要解决这个问题,你可以尝试以下步骤:

  • 检查位数:确保你的应用程序和 HALCON DLL 都是相同的位数。你可以在 HALCON 的安装目录中查找DLL,并检查其属性来确定它是 32 位还是 64 位。

  • 重新安装 HALCON:有时重新安装 HALCON 可以解决 DLL 损坏或安装不正确的问题。 检查依赖项:使用工具(如Dependency Walker)来检查 HALCON DLL 的依赖项,并确保它们都已正确安装。


解决方案:

提示:这里填写的是该问题的具体解决方案:

我的问题是第一个位数不匹配,因为我是安装的64位的Halcon版本,但是选择了优先32位,因此要做出调整。

右键→属性→生成→目标平台→将Any CPU替换成 x64(这里根据自己安装Halcon位数调整)
  1. 右键
    在这里插入图片描述

  2. 属性
    在这里插入图片描述

  3. 生成
    在这里插入图片描述

  4. 目标平台
    在这里插入图片描述

  5. 将Any CPU替换成 x64(这里根据自己安装Halcon位数调整,如果你是32位的你要选择x86)
    在这里插入图片描述

记得要Ctrl+S保存,“ * ”表示未保存
在这里插入图片描述

成功效果展示

在这里插入图片描述

  • 30
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值