C# 有没有办法从托管64位代码加载32位DLL,而不将托管代码降级为32位?
我有一个程序集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,它给了我一个异常C# 有没有办法从托管64位代码加载32位DLL,而不将托管代码降级为32位?,c#,.net,32bit-64bit,dllimport,loadlibrary,C#,.net,32bit 64bit,Dllimport,Loadlibrary,我有一个程序集Utils,它被设置为“任意CPU”,我有一个托管EXE,它也被设置为“任意CPU”。exe使用我的Utils程序集 我的Utils程序集必须加载非托管、非com 32位DLL并调用某些函数 我每次都收到一个异常“试图加载一个格式不正确的程序” 有没有办法让我的EXE和程序集仍在64位模式下运行,但仍然加载32位DLL以进行一些简单的函数调用 我知道,如果我在32位模式下构建EXE,那么它就会工作,但我的Utils程序集将被WCF web服务和其他可能在64位模式下运行的程序使用,
谢谢你的帮助。不。一切都必须一样。不,这是不可能的。如果无法将DLL升级到64位,则必须执行某些操作,例如将其托管在32位进程中,并使用一种.NET进程间通信机制来使用它。像WCF一样。如果您不能或不愿意更改流程或程序集以匹配其他流程或程序集,那么不,没有简单的方法来完成您想要做的事情 从64位进程与32位程序集交互的唯一方法,或者从64位进程与32位程序集交互的唯一方法,是将该程序集加载到单独的进程中,并使用进程间调用与之对话 这两种情况下的代码基本上是不兼容的,所以真的没有办法 要么:
将32位代码作为COM对象公开,并在进程外访问它。这是您唯一的选择。如果您使用IIS托管WCF,您应该尝试以下答案: