2012-07-25 12 views
15

Cuando uso CDLL para llamar a dbit de 32 bits en 32 bit python, funciona bien. Pero, desafortunadamente, en mi 64bit win7 os solo instala 64 bit python, cuando se llama gira: ¡no es una aplicación win32 efectiva!¿Puedo usar 32bit dll o exe en 64bit python?

¿Puedo usar 32bit dll o exe en 64bit python? ¿O tengo que instalar 32 bit python en su lugar?

+1

No debería tener problemas para instalar 32bit Python en su máquina. –

+0

Este es un caso específico de la pregunta general en http://stackoverflow.com/questions/5720884/load-32-bit-shared-library-from-64- bit- application – cdiggins

Respuesta

25

EXE de 64 bits no pueden cargar archivos DLL de 32 bits. (Y viceversa: EXE de 32 bits no pueden cargar archivos DLL de 64 bits). Después de todo, no pueden ponerse de acuerdo sobre el tamaño de un puntero: ¿qué pasaría si el EXE asigna memoria por encima del límite de 4GB y desea pasar ese puntero a la DLL de 32 bits?

Vas a tener que o bien:

  1. hacer una versión de 64 bits de su DLL;
  2. Utilice una versión de 32 bits de Python; o
  3. Aloje la DLL en un EXE separado (32 bits) y use alguna forma de comunicación entre procesos para hablar con ella desde su proceso de Python de 64 bits.
+0

, por lo que la versión de Python de 64 bits no puede elegir ejecutar en modo de 32 bits? al igual que 64bit win7 puede ejecutar la aplicación de 32 bits – hjhnju

+5

64 bits Windows puede ejecutar procesos de 32 bits, pero cada proceso individual debe ser de 64 bits o 32 bits; no puedes mezclar los dos dentro de un solo espacio de direcciones. Si desea ejecutar una aplicación como de 32 bits, debe compilarse como una aplicación de 32 bits. (Esos tamaños de punteros nuevamente. Si se compila una aplicación para que los punteros tengan un tamaño de 64 bits, no funcionará con punteros de 32 bits, y viceversa). Si la aplicación se compila como de 32 bits, se ejecuta como una aplicación de 32 bits; si se compila como de 64 bits, se ejecuta como una aplicación de 64 bits (en un sistema operativo de 64 bits y no se ejecuta en absoluto en un sistema operativo de 32 bits). –

Cuestiones relacionadas