2010-02-15 6 views
28

Existe-t-il un moyen de charger une bibliothèque DLL 32 bits (quelque chose ayant la même utilisation que LoadLibrary)? Je voudrais utiliser cette fonction avec GetProcAddress.Charger la bibliothèque DLL 32 bits dans l'application 64 bits

J'ai regardé WOW, mais il ne semble pas offrir la fonctionnalité. La fonctionnalité devrait exister, puisque des outils comme DependencyWalker sont capables de lire les symboles d'une DLL 32 bits même si elle est 64 bits.

grâce

+0

La réponse est ici: http://stackoverflow.com/questions/128445/calling-32bit-code-from-64bit-process. La réponse de John Knoeller ci-dessous est également correcte. –

+0

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

+0

@John B. Lambe Le titre de ce post est plus clair que celui que vous lié pour ceux qui recherchent la chose exe-call-dll. – ebk

Répondre

40

Désolé, mais vous ne pouvez charger une DLL 32 bits dans un processus 64 bits lorsque vous chargez la DLL en tant que fichier de données. Vous ne pouvez pas exécuter le code. http://support.microsoft.com/kb/282423

Microsoft vous recommande d'utiliser interprocess COM pour utiliser du code 32 bits avec une application 64 bits. Voici un article expliquant le processus http://blog.mattmags.com/2007/06/30/accessing-32-bit-dlls-from-64-bit-code/ Ce n'est pas amusant.

+0

Lien mis à jour pour l'article: http://blog.mattmags.com/2007/06/30/accessing-32-bit-dlls-from-64-bit-code/ Voir aussi http://stackoverflow.com/questions/128445/calling-32bit-code-from-64bit-process –

2

Il y a une différence entre la lecture d'un exécutable 32 bits et l'exécution de code dans un fichier exécutable 32 bits. Je ne crois pas que Windows offre des fonctionnalités pour le faire. La seule façon de le faire est de créer un processus 32 bits qui charge la DLL puis effectue une communication interprocessus pour transmettre les résultats entre les deux processus.

0

Si tout ce que vous êtes désireux de faire est d'obtenir des ressources de, vous pouvez charger en tant que fichier de données:

LoadLibraryEx(exeName, NULL, LOAD_LIBRARY_AS_DATAFILE); 

Alors appelez FindResource normalement.