在64位系统上使用32位DLL显示0x8007000B错误

问题描述:

我必须在我的应用程序中使用第三方DLL。该DLL是一个32位,我使用的系统是64位操作系统。在64位系统上使用32位DLL显示0x8007000B错误

我已导入32位DLL在我的申请DOTNET的(框架-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 - I设置了 “启用的32位应用程序” 为 “真”。

还尝试将编译器管理器设置为 - X86,x64和任何CPU。

但所有的尝试导致同样的错误

An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B) 

如何解决这个问题......

+0

可能是你可以找到你的答案在这里 Aakash 2013-05-14 09:32:24

+0

可能重复[如何以32位模式运行VS 2010本地IIS](http://*.com/questions/10711498/how-to-run-vs-2010-local-iis-in-32-bit-mode) – 2013-05-14 10:03:29

+0

请参阅这篇文章关于0x8007000B错误http://*.com/questions/18007967/net-framework-error-hresult-0x8007000b/36353971#36353971 – JinSnow 2016-04-01 10:28:19

检查在Configuration Manager的构建复选框可执行文件,是什么它正在运行的CPU,可能你有任何CPU在那里建立。重新启动Visual Studio然后不抱怨它不能调试程序集。该项目开放的属性 - >编译期>高级编译选项 - >目标CPU

右键单击:它应该与“站台”你正在建设。也就是说,如果你正在构建“任何CPU”,那么“目标CPU”应该说“任何CPU”。通过使所有平台处于活动状态并检查此设置来浏览所有平台。

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

重新启动您的网站,它应该工作。

+0

嗨。我已经完成了你在第一段和第三段中提到的所有事情。但它导致同样的错误...当试图看到编译器选项时,属性没有像“Compile-> Advanced Compiler Options”这样的选项 – Renuka 2013-05-14 10:05:20

+0

它取决于特定的项目,你的应用程序到底是什么? – 4pie0 2013-05-14 10:27:28

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

重新启动您的网站,它应该工作。

当我运行在64位机上的32位的DLL和使用的DllImport方法时,忘记安装相应的可再发行库我打电话我都经历过这个问题两者。我偶尔需要安装visual C++可再发行组件,当一个被调用的库有依赖关系时,我还需要安装英特尔Visual Fortran可再发行组件 - 从.NET库调用Fortran函数时。