我们有一个winforms应用程序,必须与AS400交谈。为此,我们在Winforms应用程序中导入了IBM.Data.DB2.iSeries类,并在我们的机器上安装了IBM System I Access for Windows。它必须具有System I Access,否则它将不与AS / 400通信。在我的64位开发机器上一切正常。它也适用于客户端的64位机器。但是,当我们尝试在32位机器上安装它时,我们会遇到Bad Image格式异常。我们尝试只使用x86安装程序而不是任何cpu,但这不起作用(同样的坏图像异常)。有什么想法吗?
答案 0 :(得分:5)
即使您已将程序编译为32位,但它仍在尝试加载64位dll。既然你说第三方dll是32位,剩下的就是你自己的dll了。
您可以通过将解决方案平台设置为x86来验证这一点。然后检查所有项目(exe和dll)是否设置为x86。我怀疑其中一个平台目标设置为x64。您可以通过右键单击Project来检查它们,选择Properties,Build-tab - >平台目标。
还要确保所有dll实际上都设置为Configuration Manager中的Build(从菜单栏的Solution Platforms下拉列表中选择“Configuration Manager ...”。
答案 1 :(得分:2)
我不确定你的程序集有什么问题,但我的建议是尝试从你的构建中获取PE file validator和check the magic number可执行文件和动态库文件。
具体来说,在执行更深入的验证之前,请先查看每个文件是以0x10b
还是0x20b
作为第一项检查。您可以使用(现已停用)PEiD等工具轻松完成此操作。
正如勘误表中所提到的,当你期望32时,你的二进制文件极有可能是64位。使用a debugger that can resolve dependencies这是最容易找到的,尽管这可能不合法。< / p>