Неправильно ли вызывать user32.dll в 64-битной Windows из 64-битного приложения? Я делал это успешно несколько раз и никогда не сталкивался с ошибкой, но это кажется противоречивым. Должен ли я вместо этого искать user64.dll?
С# PInvoking user32.dll в 64-битной системе
Ответы (2)
Имя 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)
person
mmx
schedule
08.10.2009
Сейчас это вводит в заблуждение, но изначально он был назван так, чтобы различать 16 и 32 бита, не так ли? Но вряд ли они смогут изменить название, это слишком многое сломает...
- person Matthew Scharley; 09.10.2009
Ага. Я отчетливо помню общие сбои защиты, вызванные USER.EXE в Windows 3.1 в дни моего детства.
- person mmx; 09.10.2009
Должен любить, как каталог System32 все еще называется в 64-битных окнах :-)
- person Justin; 09.10.2009
Нет user64.dll по той же причине, которую вы только что описали, программа .NET может быть независимой от архитектуры ЦП, поэтому один и тот же код должен работать на x86 и x64.
Если вы перенесете свою программу на платформу x86, она по-прежнему будет работать без каких-либо изменений.
Я думаю, что когда они назвали user32.dll, они не имели в виду эти сценарии.
person
Shay Erlichmen
schedule
08.10.2009