C# PInvoking user32.dll 在 64 位系统上
Posted
技术标签:
【中文标题】C# PInvoking user32.dll 在 64 位系统上【英文标题】:C# PInvoking user32.dll on a 64 bit system 【发布时间】:2010-12-05 04:09:47 【问题描述】:从 64 位应用程序在 64 位 Windows 上 pinvoke user32.dll 是否错误?我已经成功地完成了很多次并且从未出现过错误,但这似乎是矛盾的。我应该寻找 user64.dll 吗?
【问题讨论】:
【参考方案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 位窗口中仍然被称为 :-)以上是关于C# PInvoking user32.dll 在 64 位系统上的主要内容,如果未能解决你的问题,请参考以下文章
是否有从 USER32.DLL 导入所有内容的 C# 即用型类? [关闭]