C # PInvoking user32.dll в 64-битной системе - PullRequest
26 голосов
/ 09 октября 2009

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

Ответы [ 2 ]

32 голосов
/ 09 октября 2009

Имя 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)
1 голос
/ 09 октября 2009

Там нет user64.dll по той же причине, что вы только что описали, программа .net может не зависеть от архитектуры процессора, поэтому тот же код должен работать на x86 и x64. Если вы перенесете свою программу на платформу x86, она все равно будет работать без каких-либо изменений.
Я предполагаю, что когда они назвали user32.dll, они не имели в виду эти сценарии.

...