2

我有一个程序集,Utils,它设置为“任何 CPU”,我有一个托管 EXE,它也设置为“任何 CPU”。该 exe 使用我的 Utils 程序集。

我的 Utils 程序集必须加载一个非托管的、非 com 的 32 位 DLL 并调用一些函数。

我每次都收到异常“尝试加载格式不正确的程序。”。

有什么方法可以让我的 EXE 和程序集在 64 位模式下运行,但仍然加载 32 位 DLL 以进行一些简单的函数调用?

我知道如果我在 32 位模式下构建我的 EXE,那么它将工作,但我的 Utils 程序集将被 WCF Web 服务和其他可能在 64 位模式下运行的程序使用,并且它仍然需要调用 32 位 dll。

有什么办法吗?我试过使用 LoadLibrary,它在从 64 位代码调用时只返回一个 0 指针,而 DllImport 给了我一个异常。

谢谢您的帮助。

4

3 回答 3

4

不,这是不可能的。如果您无法将 DLL 升级到 64 位,那么您将不得不做一些绝望的事情,例如在 32 位进程中托管它并使用 .NET 进程间通信机制之一来使用它。就像 WCF 一样。

于 2011-03-31T17:40:40.577 回答
2

如果您不能或不会更改流程或程序集以匹配另一个,那么不,没有简单的方法可以做您想做的事情。

从 64 位进程与 32 位程序集交互(反之亦然)的唯一方法是将程序集加载到单独的进程中,并使用进程间调用与其对话。

这两种情况的代码根本不兼容,所以真的没办法。

任何一个:

  1. 将您的程序以及需要与该程序集交互的所有其他进程也更改为 32 位
  2. 将您的程序集也更改为 Any CPU
  3. 使用 shim 进程和 IRPC,如 WCF 或类似的
于 2011-03-31T17:41:39.790 回答
0

不,一切都必须相同。

于 2011-03-31T17:40:09.853 回答