ホームページ >バックエンド開発 >Python チュートリアル >Python で ctypes を使用して DLL をロードすると、「OSError: [WinError 193] %1 は有効な Win32 アプリケーションではありません」が表示されるのはなぜですか?
問題:
Python で ctypes を使用して DLL をロードしようとすると、次のエラーが発生します:
OSError: [WinError 193] %1 is not a valid Win32 application
このエラーは、32 ビット アプリケーションを 64 ビット上で実行しようとすると発生しますsystem.
解決策:
根本的なエラーは ERROR_BAD_EXE_FORMAT (193, 0xC1) です。これは、Windows が実際には存在しない実行可能 (PE) イメージをロードしようとしたときに発生します。 。このエラーにはさまざまな理由が考えられます。
DLL をロードする Python の特定のケースでは、LoadLibraryW が呼び出されます。 DLL 名が指定されており、DLL のアーキテクチャ (32 ビットと 64 ビット) が Python プロセスのアーキテクチャと一致しない場合にも同じエラーが発生します。プログラムを正しく実行するには、CPU アーキテクチャが一致している必要があります。
Python Context:
CTypes は LoadLibrary を使用して DLL をロードしますが、これにより同じエラーが発生する可能性があります。次に例を示します。
import ctypes import os dll_name = os.path.join( os.path.dirname(__file__), DLL_BASE_NAME + ("dll" if sys.platform[:3].lower() == "win" else "so")) print(f"Attempting to load: [{dll_name}]") dll00 = cts.CDLL(dll_name)
DLL に無効なコンテンツが含まれている場合、次のエラーが表示されます。
Traceb (most recent call last): File "code00.py", line 25, in <module> rc = main(*sys.argv[1:]) File "code00.py", line 14, in main dll00 = ct.CDLL(dll_name) File "c:\Install\pc064\Python\Python.07.09\lib\ctypes\__init__.py", line 364, in __init__ self._handle = _dlopen(self._name, mode) OSError: [WinError 193] %1 is not a valid Win32 application
ボーナス:
DLL他の DLL に依存することもあるため、依存関係が満たされていない場合は同じエラーが発生する可能性があります。このエラーは、コンパイル中に DLL が別の DLL にリンクされると自動的に発生する可能性があります。
結論:
このエラーを回避するには、次のことを確認してください。
エラーが発生した場合は、依存関係からエラーが伝播する可能性があるため、関連する DLL の依存関係ツリーを確認してください。さらに、ツールを使用して DLL の依存関係を確認します。
推奨事項:
この特定のケースでは、互換性がより高い 64 ビット Python をインストールして実行します。 .
以上がPython で ctypes を使用して DLL をロードすると、「OSError: [WinError 193] %1 は有効な Win32 アプリケーションではありません」が表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。