【问题标题】:C# PInvoking user32.dll on a 64 bit systemC# PInvoking user32.dll 在 64 位系统上
【发布时间】:2010-12-05 04:09:47
【问题描述】:

从 64 位应用程序在 64 位 Windows 上 pinvoke user32.dll 是否错误?我已经成功地完成了很多次并且从未出现过错误,但这似乎是矛盾的。我应该寻找 user64.dll 吗?

【问题讨论】:

    标签: c# 64-bit pinvoke 32-bit user32


    【解决方案1】:

    没有 user64.dll 的原因与您刚才描述的完全相同,.NET 程序可能与 CPU 架构无关,因此相同的代码需要在 x86 和 x64 上运行。
    如果您将您的程序带到 x86 平台,它仍然可以运行而无需任何修改。
    我猜当他们命名 user32.dll 时,他们并没有考虑到这些场景。

    【讨论】:

      【解决方案2】:

      user32.dll 这个名称具有误导性。这是您呼叫的user32.dll 的64 位版本。 64 位版本位于%windir%\System32\user32.dll

      包含一个 32 位版本以兼容 32 位应用程序。它位于%windir%\SysWOW64\user32.dll。您可以使用dumpbin 实用程序检查它们:

      System32\user32.dll:

      FILE HEADER VALUES
              8664 machine (x64)
      

      SysWOW64\user32.dll:

      FILE HEADER VALUES
               14C machine (x86)
      

      【讨论】:

      • 现在有误导性,但它最初的命名是为了区分 16 位和 32 位,不是吗?但是他们几乎不能改变名字,那会破坏太多东西......
      • 是的。我清楚地记得童年时期由 Windows 3.1 中的“USER.EXE”引起的一般保护错误。
      • 一定很喜欢 System32 目录在 64 位窗口中仍然被称为 :-)
      猜你喜欢
      • 2012-03-16
      • 2011-05-26
      • 2011-09-12
      • 2011-11-30
      • 2012-04-03
      • 1970-01-01
      • 2013-05-08
      • 2011-09-05
      • 1970-01-01
      相关资源
      最近更新 更多