Error loading DLL in python, not a valid win32 application [duplicate]

I am trying to load a DLL in python to call functions.

import ctypes
from ctypes import *

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

I get the following error in my stack.

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

I also tried cdll with the same code.

I looked up the error and windows says it's due to a path containing spaces... which I do not think is really the problem...

Am I loading this DLL wrong or is there something that might be wrong in the dll?


Solution 1:

As the comments suggest, it could be an architecture problem.

If you're using a 32bit DLL with 64bit Python, or vice-versa, then you'll probably get errors.

Since I've had your error before, I recommend trying to load your DLL with 32bit Python.

One way to test if a *.dll-file is 32bit or 64bit, is to use dumpbin.exe, e.g.

dumpbin /headers dsusb.dll

...

FILE HEADER VALUES
             14C machine (x86)
...

machine (x86) means 32bit, machine (x64) means 64bit.

Solution 2:

I had the same issue. I fixed by compiling my C code using the VS2015 x64 Native Tools Command Prompt. Now everything is 64bit.