在64位的应用程序中,从user32.dll调用PInvoke是否有问题?虽然我已经成功地这样做了很多次,也从未出现过错误,但这似乎有些矛盾。我应该寻找user64.dll吗?
名称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)
SysWOW64\user32.dll:
FILE HEADER VALUES
14C machine (x86)
正如您所描述的那样,没有user64.dll,这是由于.NET程序可以对CPU架构不可知,因此相同的代码需要在x86和x64上工作。
如果您将程序转移到x86平台,它仍将运行而无需进行任何修改。
我猜当他们命名user32.dll时,他们没有考虑到这些情况。