2010-10-29 27 views
7

J'écris un script python sous Linux, et j'ai besoin d'appeler certaines fonctions de Windows disponibles dans Wine. Plus précisément, AllocateAndInitializeSid et LookupAccountSidW, pour déterminer qui est connecté à un ordinateur Windows distant. Ces fonctions font partie de advapi32.dll in Wine (edit: en utilisant les réponses, j'ai pu appeler la fonction, mais LookupAccountSidW ne fonctionne que sur l'ordinateur local).Comment appeler Wine dll à partir de python sous Linux?

Comment puis-je accéder à ces fonctions, ou à une DLL Wine en général? J'ai essayé

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

mais il en résulte une erreur:

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

Y at-il une autre fonction ctypes qui fonctionnerait, ou une interface vin que je pourrais utiliser?

+0

Avez-vous essayé 'windll'? –

Répondre

5

Est-ce que Wine ne fournit pas les versions *.so des dll? Il me semble avoir /usr/lib32/wine/advapi32.dll.so, par exemple.

Si vous utilisez un ordinateur 64 bits, gardez à l'esprit que vous aurez besoin d'une version 32 bits de Python pour charger les bibliothèques 32 bits.

+0

Merci, cela fonctionne! Pour moi, c'était en fait '/ usr/lib/wine/advapi32.dll.so'. – Justin

+3

Pour les curieux, j'ai seulement eu l'appel à travailler sur python dans wine et à utiliser windll.LoadLibrary, car apparemment le fichier .so utilise la convention d'appel stdcall, qui n'est pas exposée dans la version linux de ctypes (cdll). – Justin

0

Comprendre que .DLL est le format utilisé par Windows.

Sur linux, ces bibliothèques se terminent par .SO

Vous ne pouvez pas utiliser une bibliothèque compilée pour une plate-forme sur l'autre. Ce n'est pas compatible.

+3

Incorrect. Onc peut. –

+1

Je veux dire ** nativement **, * nix ne supporte pas les DLL Windows. Mais je me suis intéressé à votre commentaire, s'il vous plaît fournir une référence. – karlphillip