2009-07-12 5 views
11

Pytam bo zauważyłem, że wielu 64 bitowych EXE odwołuje się przeciwko temu, co wydaje się być 32-bitowe biblioteki DLL.Czy można 64-bitowe połączenie EXE z 32-bitowymi plikami DLL?

Na przykład moja 64-bitowa aplikacja MFC łączy się z user32.dll, urlmon.dll, wininet.dll - z których wszystkie są 32-bitowymi plikami DLL, które znajdują się w systemie Windows \ system32.

Czy jest to niektóre specyficzne dla MS czary, które odnoszą się do tych bibliotek DLL, czy też istnieje kompatybilność wsteczna, tak jak w przypadku 64-bitowych plików EXE, które wymagają starszych 32-bitowych bibliotek DLL?

+0

myślę, że jesteśmy gotowi do kolejnej wersji Dependency Walker. Obsługuje 64-bitowe pliki wykonywalne w niekiedy mylący sposób i pokazuje inne irytujące ostrzeżenia. To nie są błędy, ale z pewnością można je lepiej przedstawić. Myślę, że tego rodzaju pytania to +1 dla nowej wersji. – eran

+0

@Eran, pobrałem najnowszy zależy do 64 bitów i wskazuje DLL zależnych jako 64. –

+0

Jest rzeczywiście niektóre czary - na Win64 64-bitowy Ntdll.dll zostanie załadowany do wszystkich procesów, zarówno 32-bitowe i 64 -kawałek. Ale nic magicznego w żadnej z wymienionych bibliotek DLL. –

Odpowiedz

23

Nie można połączyć 64-bitowych exe do 32-bitowych bibliotek DLL lub odwrotnie. W 64-bitowym systemie operacyjnym Windows biblioteki DLL w systemie Windows \ System32 są w rzeczywistości bibliotekami 64-bitowymi. Wersje 32-bitowe znajdują się w Windows \ SysWow64.

+1

Zależy pokazuje te obrazy jako 32 bit ... Jak to się stało? –

+6

Jeśli "zależy" jest programem 32-bitowym, wówczas pojawia się komentarz ssg - warstwa WOW przekierowuje widok 32-bitowych aplikacji systemu plików, aby zobaczyć, co jest w SysWow64 jak w System32. –

+0

Wow, zawsze myślałem, że to na odwrót. Ciekawy. – thebunnyrules

13

Zadzwoń 32 z 64, pewien, że to możliwe. (W oknach to nazywa się WOW, co oznacza Windows na Windowsie). Ale, viceversa To nie działa.

Tutaj masz wyjaśnienie jak:

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

Nadzieję, że służy.

+1

Jest to przydatna technika i powinna działać w obu kierunkach, ale nie jest tak naprawdę "łączona z". –

+0

Och, OK: D Muszę się dowiedzieć więcej na ten temat: D – Sheldon

+1

Aby być precyzyjnym (i uniknąć rozczarowania), to nie jest tak naprawdę "Call 32 from 64", "rozwiązanie" opisane w artykule tworzy jedynie surogat 32 -bituje proces i używa IPC do przekazywania wywołań z 64-bitowego procesu. "Call 32 from 64" bezpośrednio nie jest możliwe (w trybie użytkownika), o ile wiem. – rustyx

2

Najnowsza wersja Dependency Walker (tutaj: http://www.dependencywalker.com/) rozwiązuje ten problem. Znajduje poprawne pliki DLL i unika błędów niedokładnych.

(jestem późno do partii, ale google jeszcze znaleźć na to pytanie, gdy miałem podobny problem.)

Powiązane problemy