47

関数を呼び出すためにPythonでDLLをロードしようとしています。

import ctypes
from ctypes import *

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

スタックに次のエラーが表示されます。

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

同じコードで cdll も試しました。

エラーを調べたところ、Windowsはスペースを含むパスが原因だと言っています...これは実際には問題ではないと思います...

この DLL を間違ってロードしていますか、それとも dll に問題がある可能性がありますか?

4

3 に答える 3

55

コメントが示唆するように、それはアーキテクチャの問題である可能性があります。

64 ビット Python で 32 ビット DLL を使用している場合、またはその逆の場合、おそらくエラーが発生します。

以前にエラーが発生したことがあるので、DLL を 32 ビット Python でロードすることをお勧めします。

*.dll ファイルが 32 ビットか 64 ビットかをテストする 1 つの方法は、次のように使用することですdumpbin.exe

dumpbin /headers dsusb.dll

...

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

machine (x86)は 32 ビットを意味し、machine (x64)は 64 ビットを意味します。

于 2015-01-12T20:16:01.910 に答える
2

同じ問題がありました。VS2015 x64 Native Tools コマンド プロンプトを使用して C コードをコンパイルすることで修正しました。今はすべて64ビットです。

于 2016-08-04T18:34:13.740 に答える