【问题标题】:Using 32-bit dll on 64-bit system shows 0x8007000B Error在 64 位系统上使用 32 位 dll 显示 0x8007000B 错误
【发布时间】:2013-05-08 12:16:54
【问题描述】:

我必须在我的应用程序中使用第三方 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 位应用程序”设置为“真”。

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

但是所有的尝试都会导致相同的错误

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

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

【问题讨论】:

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    检查配置管理器中的 Build 复选框以获取可执行文件,它正在运行的 CPU,可能你在那里有 Any CPU build。然后重新启动 Visual Studio,不要抱怨它无法调试程序集。

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

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

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

    【讨论】:

    • 嗨。我已经完成了你在第 1 段和第 3 段中提到的所有事情。但它会导致同样的错误......当试图查看编译器选项时,属性没有像“编译->高级编译器选项”这样的选项
    • 这取决于具体的项目,你的应用究竟是什么?
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2012-03-16
      • 1970-01-01
      • 1970-01-01
      • 2012-04-03
      • 1970-01-01
      • 2021-12-22
      • 2011-09-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多