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 位系统上的主要内容,如果未能解决你的问题,请参考以下文章

c# 调用User32.dll

是否有从 USER32.DLL 导入所有内容的 C# 即用型类? [关闭]

执行从 C# 到 EuroTruck 的密钥输出不起作用(PostMessage、user32.dll)

C#调用user32.dll Win32的API函数

c# 调用windows API(user32.dll)

使用 user32.dll 从外部应用程序的文本框(Unicode)中提取文本到 C# 应用程序中