Неправильно ли вызывать user32.dll на 64-битной Windows из 64-битного приложения? Я делал это успешно несколько раз и никогда не ошибался, но это кажется противоречивым. Должен ли я искать user64.dll вместо?
С# PInvoking user32.dll на 64-битной системе
Ответ 1
Имя 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)
Ответ 2
Нет никакой user64.dll по той же самой причине, которую вы просто описываете, программа .net может быть агностически для архитектуры процессора, поэтому тот же код должен работать на x86 и x64.
Если вы возьмете свою программу на платформу x86, она будет работать без каких-либо изменений.
Я предполагаю, что когда они назвали user32.dll, у них не было таких сценариев.