繁体   English   中英

有什么方法可以从托管的64位代码加载32位DLL,而无需将托管代码降级为32位?

[英]Is there any way to load a 32-bit DLL from managed 64-bit code without downgrading the managed code to 32-bit?

我有一个程序集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则给我一个异常。

谢谢您的帮助。

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

如果您无法或不会更改流程或程序集以匹配其他程序或程序集,那么不行,没有简单的方法来完成您想做的事情。

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

两种情况下的代码从根本上是不兼容的,因此实际上是没有办法的。

或者:

  1. 将程序以及需要与该程序集交互的所有其他进程更改为32位
  2. 更改您的程序集也为任何CPU
  3. 使用填充程序和IRPC,例如WCF或类似

否。所有内容都必须相同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM