在64位系统上使用32位dll文件会显示0x8007000B错误。

7

我需要在我的应用程序中使用第三方DLL。该DLL是32位的,而我使用的系统是64位的操作系统。

我已经将32位的DLL导入到我的DotNet应用程序(Framework-4.5)中,如下所示:

 [DllImport("Sample.dll",
  EntryPoint = "Add",
  CharSet = CharSet.Ansi,
  CallingConvention = CallingConvention.StdCall)]
  public static extern int Add(int iA, int iB);

在IIS 7.5中,我已将“启用32位应用程序”设置为“True”。并尝试将编译器管理器设置为- X86、x64和任何CPU。但是所有尝试的结果都会导致相同的错误。
 An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)

如何解决此问题......

也许你可以在这里找到答案https://dev59.com/NXA75IYBdhLWcg3wKluM - Aakash
可能是如何在32位模式下运行VS 2010本地IIS的重复问题。 - Hans Passant
请参阅有关0x8007000B错误的此帖子:https://dev59.com/bWMl5IYBdhLWcg3w76oI#36353971 - JinSnow
3个回答

2

如果您尝试在IIS 7(和/或64位操作系统机器)上运行32位应用程序,那么您将会遇到相同的错误。因此,在IIS 7上,右键单击应用程序池并进入“高级设置”,将“启用32位应用程序”更改为“TRUE”。

重启网站即可解决问题。


0

在 Configuration Manager 中为您的可执行文件勾选Build复选框,查看它运行的 CPU,可能您有 Any CPU 构建。然后重新启动 Visual Studio,以免出现无法调试程序集的情况。

右键单击项目并打开“属性”->“编译”->“高级编译选项”->“目标 CPU”:它应该与您正在构建的“平台”匹配。也就是说,如果您正在构建“Any CPU”,则“目标 CPU”应该显示“Any CPU”。通过激活所有平台并检查此设置来完成此操作。

如果您尝试在 IIS 7(和/或 64 位操作系统机器)上运行 32 位应用程序,则会收到相同的错误。因此,从 IIS 7 中,右键单击应用程序池中的应用程序,并转到“高级设置”,将“启用 32 位应用程序”更改为“TRUE”。

重新启动您的网站,它应该可以正常工作。


嗨。我已经完成了您在第一段和第三段中提到的所有事情,但结果仍然是相同的错误... 当尝试查看编译器选项时,属性中没有像“Compile->Advanced Compiler Options”这样的选项。 - Renuka
这取决于具体的项目,你的应用程序是什么? - 4pie0

0

我曾经在64位机器上运行32位dll和使用DllImport方法时遇到过这个问题,忘记安装我所调用的适当可分发库。有时候,当被调用的库依赖于Visual C++可分发库时,我需要安装Visual C++可分发库;而当从.NET库中调用Fortran函数时,我也需要安装Intel Visual Fortran可分发库。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接