web-dev-qa-db-fra.com

Erreur de chargement DLL en python, pas une application Win32 valide

J'essaie de charger une DLL en python pour appeler des fonctions. 

import ctypes
from ctypes import *

dsusb = ctypes.WinDLL('c:\python27\dsusb.dll')

Je reçois l'erreur suivante dans ma pile.

C:\Python27>python test.py
Traceback (most recent call last):
  File "test.py", line 4, in <module>
    dsusb = ctypes.WinDLL('c:\python27\dsusb.dll')
  File "C:\Python27\lib\ctypes\__init__.py", line 365, in __init__
    self._handle = _dlopen(self._name, mode)
WindowsError: [Error 193] %1 is not a valid Win32 application

J'ai aussi essayé cdll avec le même code.

J'ai regardé l'erreur et Windows m'a dit que c'était dû à un chemin contenant des espaces ... ce qui, à mon avis, n'est pas vraiment le problème ...

Est-ce que je charge mal cette DLL ou y a-t-il quelque chose qui pourrait être erroné dans la DLL?

37
jeffpkamp

Comme le suggèrent les commentaires, il pourrait s'agir d'un problème d'architecture.

Si vous utilisez une DLL 32 bits avec Python 64 bits, ou inversement, vous obtiendrez probablement des erreurs.

Comme j'ai déjà eu votre erreur auparavant, je vous recommande d'essayer de charger votre DLL avec Python 32 bits.

40
ABM

J'ai eu le même problème. J'ai corrigé en compilant mon code C à l'aide de l'invite de commande d'outils natifs VS2015 x64. Maintenant tout est 64bit.

0
Cassio

Cette erreur peut également venir si vous n'avez pas toutes les autres DLL requises. Assurez-vous de disposer de tous les autres fichiers .dll sur lesquels votre dll dépend. Comme quelqu'un l'a souligné, Dependency Walker est un bon outil.

0
remustata