7

我必须在我的应用程序中使用第三方 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)

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

4

3 回答 3

2

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

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

于 2013-05-14T13:01:25.533 回答
0

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

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

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

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

于 2013-05-14T09:32:06.697 回答
0

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

于 2016-09-22T15:08:33.470 回答