I am trying to load a DLL in python to call functions.
import ctypes
from ctypes import *
dsusb = ctypes.WinDLL('c:python27dsusb.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:python27dsusb.dll')
File "C:Python27libctypes__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?
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 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.
Method 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.
Method 3
That error can also come if you don’t have all the other required dlls. Make sure you have all other .dll files that your dll depend on. As someone else pointed, Dependency Walker is a good tool.
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0