Dépannage lors du chargement des modules DLL dans Python sous Windows
Des tentatives récentes d'importation d'une DLL libuvc compilée sous Windows ont généré l'erreur "Impossible de trouver module 'libuvc.dll'". Bien qu'il ait correctement trouvé le chemin du fichier à l'aide de ctypes.util.find_library, Python ne parvient pas à le charger. Le problème réside dans le paramètre winmode de la fonction ctypes.cdll.LoadLibrary.
Comprendre le paramètre Winmode
Avant Python 3.8, winmode n'existait pas et le mode était défini directement sur ctypes.DEFAULT_MODE, ce qui correspond à une valeur de zéro. Dans Python 3.8, winmode a été introduit.
Lorsque winmode est défini sur Aucun, le mode de recherche par défaut est nt._LOAD_LIBRARY_SEARCH_DEFAULT_DIRS. Ce mode de recherche ne prend pas en compte les modifications apportées aux variables d'environnement ou aux chemins.
Cependant, définir winmode sur 0 spécifie que le chemin complet doit être utilisé et que la bibliothèque est chargée avec succès. Ce comportement est documenté dans la documentation Microsoft (https://learn.microsoft.com/en-us/windows/win32/api/libloaderapi/nf-libloaderapi-loadlibraryexa).
Résoudre le problème
Pour résoudre le problème de chargement, spécifiez simplement winmode=0 lors de l'appel de ctypes.cdll.LoadLibrary, comme dans l'extrait de code suivant :
import ctypes name = ctypes.util.find_library('libuvc') lib = ctypes.cdll.LoadLibrary(name, winmode=0)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!