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

时间:2013-05-14 09:21:07

标签: visual-studio-2010 iis c#-4.0 32bit-64bit dllimport

我必须在我的应用程序中使用第三方DLL。 DLL是32位,我使用的系统是64位操作系统。

我已经在我的DotNet应用程序(framework-4.5)中导入了32位DLL,如下所示

 [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)

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

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

检查Configuration Manager中的构建复选框,查看可执行文件,运行的CPU,可能是那里有任何CPU构建。然后重新启动Visual Studio,不要抱怨它无法调试程序集。

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

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

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

答案 2 :(得分:0)

当我在64位计算机上运行32位dll时以及使用DllImport方法并且忘记为我所调用的内容安装适当的可再发行库时,我遇到了这个问题。当有一个被调用的库依赖于它时,我需要安装visual c ++ redistributable,并且当从.NET库调用Fortran函数时,我还需要安装Intel Visual Fortran可再发行组件。