Maison  >  Article  >  développement back-end  >  Pourquoi ne puis-je pas charger mon module DLL dans Python 3.8 sous Windows ?

Pourquoi ne puis-je pas charger mon module DLL dans Python 3.8 sous Windows ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-28 21:29:02683parcourir

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

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn