مشكلة في استيراد وحدة DLL في Python
لقد واجهت مشكلة عند محاولة استيراد وحدة 'libuvc.dll' في Python على Windows 10. على الرغم من نجاح تجميع المكتبة واستيرادها باستخدام نفس إصدار Python على Linux، إلا أنك تواجه الآن صعوبات على Windows.
يشير الخطأ الذي تواجهه إلى أن Python غير قادر على تحديد موقع ملف "libuvc.dll". الوحدة النمطية في المسار الذي تم استرداده بواسطة "ctypes.util.find_library('libuvc')". ومع ذلك، لقد قمت بالتحقق من وجود الملف في ذلك الموقع.
يكمن السبب في وظيفة 'cdll.LoadLibrary'. في إصدارات Python السابقة للإصدار 3.8، لم يكن المعامل "winmode" موجودًا، وتم استخدام "mode" مباشرةً. القيمة الافتراضية لـ 'mode' هي 'ctypes.DEFAULT_MODE'، والتي تقابل الصفر.
ومع ذلك، في Python 3.8 والإصدارات الأحدث، تم تقديم المعلمة 'winmode' لتحديد وضع بحث DLL. افتراضيًا، يتم تعيينه على "لا شيء"، والذي يتوافق مع "nt._LOAD_LIBRARY_SEARCH_DEFAULT_DIRS". لسوء الحظ، يتجاهل وضع البحث هذا التعديلات على 'os.environ['PATH'] وsys.path' و'os.add_dll_directory'.
الحل:
لحل هذه المشكلة، قم بتعيين المعلمة 'winmode' بشكل صريح إلى صفر في الدالة 'LoadLibrary'. سيؤدي هذا إلى إجبار بايثون على استخدام المسار الكامل واستيراد الوحدة بنجاح.
import ctypes
name = ctypes.util.find_library('libuvc')
lib = ctypes.cdll.LoadLibrary(name, winmode=0)
من خلال تحديد 'winmode=0'، يمكنك تجاوز وضع البحث الافتراضي والتأكد من قيام Python بتحميل DLL من الموقع المتوقع.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3