2010-10-29 23 views
7

Escribo un script de python en Linux y necesito llamar a algunas funciones de Windows disponibles en Wine. Específicamente, AllocateAndInitializeSid y LookupAccountSidW, para determinar quién está conectado a una computadora remota de Windows. Estas funciones son parte de advapi32.dll in Wine (edit: usando las respuestas, pude llamar a la función, pero LookupAccountSidW solo funciona en la computadora local).¿Cómo llamar a Wine dll desde Python en Linux?

¿Cómo puedo acceder a estas funciones, o a un dll Wine en general? He intentado

>>> cdll.LoadLibrary("~/.wine/drive_c/windows/system32/advapi32.dll") 

pero resulta en un error:

 
OSError: ~/.wine/drive_c/windows/system32/advapi32.dll: invalid ELF header 

¿Hay otra ctypes función que iba a funcionar, o alguna de las interfaces de vino que pueda usar?

+0

¿Has probado 'windll'? –

Respuesta

5

¿No ofrece Wine *.so versiones de los dlls? Parece que tengo /usr/lib32/wine/advapi32.dll.so, por ejemplo.

Si está en una máquina de 64 bits, tenga en cuenta que necesitará una versión de 32 bits de Python para cargar bibliotecas de 32 bits.

+0

Gracias, esto funciona! Para mí fue en realidad en '/ usr/lib/wine/advapi32.dll.so'. – Justin

+3

Para los curiosos, en realidad solo recibí la llamada para trabajar ejecutando python dentro de wine y utilizando windll.LoadLibrary, ya que aparentemente el archivo .so usa la convención de llamadas stdcall, que no está expuesta en la versión de linux de ctypes (cdll). – Justin

0

Comprenda que .DLL es el formato utilizado por Windows.

en Linux, tales bibliotecas terminan con .SO

No puede utilizar una biblioteca compilada por una plataforma sobre la otra. No es compatible

+3

Incorrecto. Onc puede. –

+1

Quiero decir ** natively **, * nix no es compatible con Windows DLL. Pero me interesó tu comentario, por favor proporciona una referencia. – karlphillip