Подтвердить что ты не робот

С# PInvoking user32.dll на 64-битной системе

Неправильно ли вызывать user32.dll на 64-битной Windows из 64-битного приложения? Я делал это успешно несколько раз и никогда не ошибался, но это кажется противоречивым. Должен ли я искать user64.dll вместо?

4b9b3361

Ответ 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, у них не было таких сценариев.