web-dev-qa-db-fra.com

Charger la bibliothèque 32 bits DLL dans l'application 64 bits

Existe-t-il un moyen de charger une bibliothèque 32 bits DLL (quelque chose avec le même usage que LoadLibrary) Je voudrais utiliser cette fonction avec GetProcAddress.

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

merci

36
adk

Désolé, mais vous ne pouvez charger un 32 bits DLL dans un processus 64 bits que 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/28242

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.

49
John Knoeller

Il y a une différence entre la lecture d'un exécutable 32 bits et l'exécution de code dans un exécutable 32 bits. Je ne crois pas que Windows offre des fonctionnalités pour ce faire.

La seule façon de le faire est de créer un processus 32 bits qui charge la DLL, puis de faire une communication interprocessus pour transmettre les résultats entre les deux processus.

2
Colin Newell

Si tout ce que vous voulez faire, c'est en obtenir des ressources, vous pouvez charger un fichier de données:

LoadLibraryEx(exeName, NULL, LOAD_LIBRARY_AS_DATAFILE);

Appelez ensuite FindResource comme d'habitude.

1
Dave F