【发布时间】:2010-12-05 04:09:47
【问题描述】:
从 64 位应用程序在 64 位 Windows 上 pinvoke user32.dll 是否错误?我已经成功地完成了很多次并且从未出现过错误,但这似乎是矛盾的。我应该寻找 user64.dll 吗?
【问题讨论】:
标签: c# 64-bit pinvoke 32-bit user32
从 64 位应用程序在 64 位 Windows 上 pinvoke user32.dll 是否错误?我已经成功地完成了很多次并且从未出现过错误,但这似乎是矛盾的。我应该寻找 user64.dll 吗?
【问题讨论】:
标签: c# 64-bit pinvoke 32-bit user32
没有 user64.dll 的原因与您刚才描述的完全相同,.NET 程序可能与 CPU 架构无关,因此相同的代码需要在 x86 和 x64 上运行。
如果您将您的程序带到 x86 平台,它仍然可以运行而无需任何修改。
我猜当他们命名 user32.dll 时,他们并没有考虑到这些场景。
【讨论】:
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)
【讨论】: