2009-07-12 5 views
11

Je demande parce que j'ai remarqué que de nombreux 64 bits EXE se lient contre ce qui semble être des DLL 32 bits. Par exemple, mes liens d'application MFC 64 bits contre user32.dll, urlmon.dll, wininet.dll - qui sont tous des DLL 32 bits qui résident dans windows \ system32.Est-ce qu'un lien EXE 64 bits contre les DLL 32 bits?

Donc, est-ce une certaine magie spécifique à MS qui s'applique à ces DLL, ou existe-t-il une compatibilité ascendante, pour ainsi dire, pour les EXE 64 bits qui ont besoin d'utiliser des DLL 32 bits héritées?

+0

Je pense que nous sommes tous prêts pour la prochaine version de dépendance Walker. Il gère les exécutables 64 bits d'une manière parfois trompeuse, et affiche d'autres avertissements agaçants. Ce ne sont pas vraiment des bugs, mais ils peuvent être mieux présentés. Je pense que ce genre de questions est un +1 pour une nouvelle version. – eran

+0

@Eran, j'ai téléchargé le dernier dépend pour 64 bits et il montre les DLL dépendantes comme 64. –

+0

Il y a en fait quelques wizardry - sur Win64 le ntdll.dll 64 bits est chargé dans TOUS les processus, à la fois 32 bits et 64 -bit. Mais rien de magique à propos des DLL que vous avez mentionnées. –

Répondre

23

Vous ne pouvez pas lier des fichiers EXE 64 bits à des fichiers DLL 32 bits ou vice versa. Sur un système d'exploitation Windows 64 bits, les DLL dans Windows \ System32 sont en fait des DLL 64 bits. Les versions 32 bits sont dans Windows \ SysWow64.

+1

Depends montre ces images en 32 bits ... comment ça se fait? –

+6

Si "depends" est un programme 32 bits, alors le commentaire de ssg entre en jeu - la couche WOW redirige la vue des applications 32 bits du système de fichiers afin qu'ils voient ce que contient SysWow64 dans System32. –

+0

Wow, j'ai toujours pensé que c'était l'inverse. Intéressant. – thebunnyrules

13

Appelez 32 à partir de 64, bien sûr Il peut. (Dans Windows, cela s'appelle WOW, ce qui signifie Windows sur Windows). Mais, viceversa Cela ne fonctionne pas.

Ici vous avez l'explication de la façon dont:

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

Espérons qu'elle dessert.

+1

C'est une technique utile et cela devrait fonctionner dans les deux sens, mais ce n'est pas vraiment "contre". –

+0

Oh, OK: D Je vais devoir en apprendre plus à ce sujet: D – Sheldon

+1

Pour être précis (et éviter les déceptions), ce n'est pas vraiment "Call 32 from 64", la "solution" décrite dans l'article crée juste un substitut 32 processus -bit et utilise IPC pour transférer les appels à partir d'un processus 64 bits. "Appel 32 à partir de 64" directement n'est pas possible (en mode utilisateur) autant que je sache. – rustyx

2

La dernière version de Dependency Walker (trouvée ici: http://www.dependencywalker.com/) résout ce problème. Il trouve les DLL correctes et évite les erreurs inexactes.

(je suis en retard à la fête, mais Google trouve encore cette question quand j'eu un problème similaire.)