Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
64位系统上的C#PInvoking user32.dll_C#_64 Bit_Pinvoke_32 Bit_User32 - Fatal编程技术网

64位系统上的C#PInvoking user32.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

从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:

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目录的名称:-)