[英]Best way to call 32-bit unmanaged code from 64-bit Managed Code using a managed code wrapper
[英]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位程序集进行交互的唯一方法(反之亦然)是将程序集加载到一个单独的进程中,并使用进程间调用与之对话。
两种情况下的代码从根本上是不兼容的,因此实际上是没有办法的。
或者:
否。所有内容都必须相同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.