Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Saya Tidak Boleh Memuatkan Modul DLL Saya dalam Python 3.8 pada Windows?

Mengapa Saya Tidak Boleh Memuatkan Modul DLL Saya dalam Python 3.8 pada Windows?

Barbara Streisand
Barbara Streisandasal
2024-10-28 21:29:02683semak imbas

Why Can't I Load My DLL Module in Python 3.8  on Windows?

Menyelesaikan Masalah Memuatkan Modul DLL dalam Python pada Windows

Percubaan baru-baru ini untuk mengimport DLL libuvc yang disusun pada Windows telah menghasilkan ralat "Tidak dapat mencari modul 'libuvc.dll'". Walaupun mencari laluan fail dengan betul menggunakan ctypes.util.find_library, Python gagal memuatkannya. Isunya terletak pada parameter winmode dalam fungsi ctypes.cdll.LoadLibrary.

Memahami Parameter Winmode

Sebelum Python 3.8, winmode tidak wujud dan mod telah tetapkan terus kepada ctypes.DEFAULT_MODE, yang sepadan dengan nilai sifar. Dalam Python 3.8, winmode telah diperkenalkan.

Apabila winmode ditetapkan kepada Tiada, mod carian lalai kepada nt._LOAD_LIBRARY_SEARCH_DEFAULT_DIRS. Mod carian ini tidak mengambil kira perubahan pada pembolehubah atau laluan persekitaran.

Walau bagaimanapun, menetapkan winmode kepada 0 menentukan bahawa laluan penuh harus digunakan dan pustaka berjaya dimuatkan. Tingkah laku ini didokumenkan dalam dokumentasi Microsoft (https://learn.microsoft.com/en-us/windows/win32/api/libloaderapi/nf-libloaderapi-loadlibraryexa).

Menyelesaikan Isu

Untuk menyelesaikan isu pemuatan, hanya nyatakan winmode=0 apabila memanggil ctypes.cdll.LoadLibrary, seperti dalam coretan kod berikut:

import ctypes

name = ctypes.util.find_library('libuvc')
lib = ctypes.cdll.LoadLibrary(name, winmode=0)

Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Memuatkan Modul DLL Saya dalam Python 3.8 pada Windows?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn