Может ли 64-битная EXE-ссылка на 32-битную DLL? - PullRequest
11 голосов
/ 12 июля 2009

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

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

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

Ответы [ 3 ]

23 голосов
/ 12 июля 2009

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

13 голосов
/ 12 июля 2009

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

Вот вам объяснение, как:

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

Надеюсь, это подойдет.

2 голосов
/ 22 июля 2012

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

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

...