首頁 >後端開發 >Python教學 >在 Python 中使用 ctypes 載入 DLL 時,為什麼我會收到「OSError: [WinError 193] %1 is not a valid Win32 application\」?

在 Python 中使用 ctypes 載入 DLL 時,為什麼我會收到「OSError: [WinError 193] %1 is not a valid Win32 application\」?

DDD
DDD原創
2024-12-01 13:19:09336瀏覽

Why Am I Getting

問題:

使用者嘗試在Python 中使用ctypes 載入DLL 時遇到下列錯誤:

OSError: [WinError 193] %1 is not a valid Win32 application

嘗試在64 位元上運行32位元應用程式時會出現此錯誤system.

解決方案:

潛在錯誤是ERROR_BAD_EXE_FORMAT (193, 0xC1),當Windows 嘗試載入實際上不是的可執行(PE) 映像時,會發生此錯誤。導致此錯誤的原因有很多:
  1. 由於下載失敗,檔案不完整。
  2. 檔案被覆蓋或損壞。
  3. 檔案系統問題損壞了

在Python 載入DLL 的特定情況下,它會呼叫LoadLibraryW DLL 名稱,如果DLL 的體系結構(32 位元與64 位元)與Python進程的體系結構不匹配,則會出現相同的錯誤。為了使程式正確運行,CPU 架構必須匹配。

Python 上下文:

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 時,會自動發生此錯誤。

結論:

要避免此錯誤,請確保:

  • 64 位元進程僅載入 64 位元 DLL。
  • 僅 32 位元進程載入 32 位元 DLL。

如果發生錯誤,請檢查所涉及 DLL 的依賴關係樹,因為錯誤可能會從依賴關係傳播。此外,使用工具檢查 DLL 的依賴關係。

建議:

在這種特定情況下,安裝並運行 64 位元 Python,因為它具有更廣泛的兼容性.

以上是在 Python 中使用 ctypes 載入 DLL 時,為什麼我會收到「OSError: [WinError 193] %1 is not a valid Win32 application\」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn