Может ли 64-битная EXE-ссылка на 32-разрядные библиотеки DLL?

Я спрашиваю, потому что я заметил, что многие 64-битные EXE-ссылки связаны с 32-разрядными DLL файлами.

Например, мои 64-битные ссылки приложения MFC против user32.dll, urlmon.dll, wininet.dll - все это 32-разрядные библиотеки DLL, которые находятся в windows\system32.

Итак, это какое-то специфическое для MS специфическое волшебство, которое относится к этим DLL, или же имеет обратную совместимость как бы для 64-битных EXE, которые должны использовать устаревшие 32-битные библиотеки DLL?

Ответ 1

Вы не можете связать 64-разрядные EXE файлы с 32-разрядными DLL файлами или наоборот. В 64-битной ОС Windows DLL в Windows\System32 на самом деле являются 64-разрядными DLL. 32-разрядные версии находятся в Windows\SysWow64.

Ответ 2

Позвоните 32 из 64, Конечно. (В Windows это называется WOW, что означает Windows на Windows). Но, наоборот, это не работает.

Здесь у вас есть объяснение того, как:

http://blog.mattmags.com/2007/06/30/accessing-32-bit-dlls-from-64-bit-code/

Надеюсь, что он служит.

Ответ 3

Последняя версия Dependency Walker (здесь: http://www.dependencywalker.com/) устраняет эту проблему. Он находит правильные DLL и избегает неточных ошибок.

(Я опаздываю на вечеринку, но google все еще нашел этот вопрос, когда у меня была аналогичная проблема.)