سؤال

وباستخدام Visual C ++ 2008 إكسبريس الطبعة. أنا ربط طلبي مع إحدى المكتبات استيراد (.lib) لDLL التي قد تكون أو لا تكون موجودة على النظام الهدف. قبل أن تسأل: لا أستطيع أن توزيع DLL مع طلبي

وإذا كان DLL غير موجود، وسرعان ما استدعاء دالة من DLL (ولكن ليس قبل ذلك!)، وأحصل على رسالة مثل

<اقتباس فقرة>   

لقد فشل هذا التطبيق لبدء لأنه لم يتم العثور على SomeLibrary.dll. إعادة تثبيت التطبيق قد حل هذه المشكلة.

وماذا أريد أن يحدث بدلا من ذلك، هو أن يكتشف أن تطبيق DLL ليس هناك، وببساطة تعطيل الوظائف التي تعتمد على ذلك. أنا يمكن أن يجعل الدعوة إلى LoadLibrary ومعرفة ما إذا كان نجح، ولكن لست متأكدا ما إذا كان هذا يكفي. ربما مكتبة الاستيراد يفعل المزيد من العمل وراء الكواليس؟

هل مكالمة LoadLibrary بسيطة كافية؟ إن لم يكن، ما أحتاج أن تفعل؟ وهذا يمكن أن يتم ذلك حتى؟

على تحديث : لبالطبع يمكنني استخدام LoadLibrary، ثم GetProcAddress لكل من وظائف أريد استخدام. ولكن هذا الازعاج، وكنت آمل أن تجنب ذلك، ومجرد استخدام مكتبة الاستيراد المقدمة بدلا من ذلك.

هل كانت مفيدة؟

المحلول

وهذا هو ما هو الخيار DelayLoad رابط ل، ولكن أنا لا أعرف ما إذا كان يدعم طبعة اكسبرس ذلك.

نصائح أخرى

لا، LoadLibrary() هو بالضبط ما تريد. النتيجة الوحيدة لاستخدامه هي مشاحنات ووضع مؤشرات الدالة في DLL عند تحميل DLL بنجاح، ولكن العملية لذلك هي مغطاة بشكل جيد في أي مكان آخر على الشبكة.

إذا كنت تذهب للتحقق هنا ( MSDN) سترى أنه عندما فشل LoadLibrary تحميل، تقوم الدالة بإرجاع قيمة NULL، ويمكنك حتى تحقق الخطأ محددة (وهذا يجب أن يكون ملف يتم العثور على) باستخدام وظيفة GetLastError.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top