将32位dll转换为64位dll

时间:2009-06-03 14:06:12

标签: c# windows-vista

当我尝试在64位应用程序中使用它时,我有32位编译的dll无法加载, 所以我想将dll转换为64位。当应用程序的平台从“任何CPU”或“x64”变为“x86”时,它工作正常。但我想在64位下使用它,因为我要从ASP页面调用dll。

请帮我解决这个问题。

4 个答案:

答案 0 :(得分:10)

Windows无法将32位dll加载到64位进程中 - 这是您无法避免的限制。这意味着如果您的32位DLL对其他32位DLLS(或使用任何32位.Net DLLS)进行任何P / Invokes,您将完全没有运气(您将需要以32位运行整个网站)。

你不清楚它什么时候起作用,什么时候不起作用。以下是解释:

  1. x86 - 32位 - 无法加载到64位进程。
  2. x64 - 64位 - 无法在32位机器上执行。
  3. AnyCPU - dual - 可以在两种环境中加载和执行。
  4. 就AnyCPU而言:

    1. 64位机器上的64位进程 - DLL加载为64位。
    2. 32位机器上的32位进程 - DLL加载为32位。
    3. 64位机器上的32位进程 - DLL加载为32位。
    4. 在大多数情况下,可以将其保留为AnyCPU。但是,正如我所说的,如果你使用的是任何本机或.Net 32​​位DLL,你需要将你的整个应用程序设置为32位(并且你可以做任何事情,或微软可以做到这一点)。

答案 1 :(得分:2)

x86标志通常是出于某种原因设置的,因此更改它可能是个坏主意。但如果你完全确定,那就是一个实用工具corflags.exe。我在C:\ Program Files \ Microsoft SDKs \ Windows \ v6.0A \ bin下有它。当然它只对.net程序集有帮助。

答案 2 :(得分:0)

如果要在32位和64位进程中加载​​纯C#DLL,那么正确的选择是AnyCPU。这将把它编译为CPU不可知的DLL,它可以加载到任何类型的进程中。

我不是百分百肯定这就是你所要求的。如果不是,你可以澄清你的问题吗?

答案 3 :(得分:0)