2010-02-15 36 views
28

¿Hay alguna manera de cargar una biblioteca DLL de 32 bits (algo con el mismo uso que LoadLibrary) Me gustaría utilizar esa función junto con GetProcAddress.Cargar biblioteca de 32 bits DLL en la aplicación de 64 bits

Miré WOW, pero parece que no ofrece la funcionalidad. La funcionalidad debería existir, ya que las herramientas como DependencyWalker son capaces de leer los símbolos de un dll de 32 bits a pesar de sus 64 bits.

gracias

+0

Esto se responde aquí: http://stackoverflow.com/questions/128445/calling-32bit-code-from-64bit-process. La respuesta de John Knoeller a continuación también es correcta. –

+0

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

+0

@John B. Lambe El título de este post es más claro que el que usted vinculado para aquellos que están buscando la cosa exe-call-dll. – ebk

Respuesta

40

Lo sentimos, pero solo puede cargar un archivo DLL de 32 bits en un proceso de 64 bits cuando está cargando el dll como un archivo de datos. No puedes ejecutar el código. http://support.microsoft.com/kb/282423

Microsoft recomienda que utilice interprocess COM para usar código de 32 bits con una aplicación de 64 bits. Aquí hay un artículo que explica el proceso http://blog.mattmags.com/2007/06/30/accessing-32-bit-dlls-from-64-bit-code/ No es divertido.

+0

Enlace actualizado para el artículo: http://blog.mattmags.com/2007/06/30/accessing-32-bit-dlls-from-64-bit-code/ Vea también http://stackoverflow.com/questions/128445/calling-32bit-code-from-64bit-process –

2

Hay una diferencia entre la lectura de un ejecutable de 32 bits y la ejecución de código dentro de un ejecutable de 32 bits. No creo que Windows ofrezca ninguna funcionalidad para hacer eso.

La única forma en la que es probable que pueda hacer eso es crear un proceso de 32 bits que cargue el dll y luego realice una comunicación entre procesos para pasar los resultados entre los dos procesos.

0

Si todo lo que está queriendo hacer es conseguir los recursos de ella, puede cargar como un archivo de datos:

LoadLibraryEx(exeName, NULL, LOAD_LIBRARY_AS_DATAFILE); 

luego llamar a FindResource de forma normal.

Cuestiones relacionadas