64位系统上的C#PInvoking user32.dll
从64位应用程序在64位Windows上pinvoke user32.dll错误吗?我已经成功地做了很多次了,从来没有犯过错误,但这似乎是矛盾的。我应该找user64.dll吗?名称64位系统上的C#PInvoking user32.dll,c#,64-bit,pinvoke,32-bit,user32,C#,64 Bit,Pinvoke,32 Bit,User32,从64位应用程序在64位Windows上pinvoke user32.dll错误吗?我已经成功地做了很多次了,从来没有犯过错误,但这似乎是矛盾的。我应该找user64.dll吗?名称user32.dll有误导性。您正在调用的是64位版本的user32.dll。64位版本位于%windir%\System32\user32.dll 为了与32位应用程序兼容,提供了32位版本。它位于%windir%\SysWOW64\user32.dll。您可以使用dumpbin实用程序检查它们: System32
user32.dll
有误导性。您正在调用的是64位版本的user32.dll
。64位版本位于%windir%\System32\user32.dll
为了与32位应用程序兼容,提供了32位版本。它位于%windir%\SysWOW64\user32.dll
。您可以使用dumpbin
实用程序检查它们:
System32\user32.dll:
FILE HEADER VALUES
8664 machine (x64)
FILE HEADER VALUES
14C machine (x86)
SysWOW64\user32.dll:
FILE HEADER VALUES
8664 machine (x64)
FILE HEADER VALUES
14C machine (x86)
没有user64.dll,原因与您刚才描述的完全相同,.NET程序可能与CPU体系结构无关,因此相同的代码需要在x86和x64上工作。
如果将程序带到x86平台,它仍将运行,无需任何修改。
我猜当他们命名user32.dll时,他们并没有考虑到这些场景。现在这有点误导,但它最初的命名是为了区分16位和32位,不是吗?但是他们几乎不能改变名字,那会破坏太多东西…是的。我清楚地记得童年时Windows 3.1中“USER.EXE”导致的一般保护故障。我一定很喜欢64位Windows中System32目录的名称:-)