بوضوح Unloading a تأخير-تم تحميله DLL

/تأخير : يسمح لك خيار الرابط إلغاء التم تحميله إلى إلغاء تم تحميله مكتبة الارتباط حيوي التي تم تم تحميلهها تأخير. بشكل افتراضي، عند إلغاء تعليمات برمجية الخاصة بك في DLL (باستخدام __FUnloadDelayLoadedDLL2/delay:unload و )، استيراد تأخير-تم تحميله تبقى في جدول عناوين الاستيراد (IAT). ومع ذلك، إذا كنت استخدم/تأخير:unload في سطر الأوامر الرابط، فتعتمد دالة المساعد إلغاء تحميل صريحة DLL، إعادة تعيين IAT إلى شكلها الأصلي؛ سيتم الكتابة فوق المؤشرات الآن-صحيح. هو IAT حقل في ImgDelayDescr يحتوي على العنوان من نسخ من IAT الأصلي (أن وجد).

المثال

الرمز

// link with /link /DELAYLOAD:MyDLL.dll /DELAY:UNLOAD
#include <windows.h>
#include <delayimp.h>
#include "MyDll.h"
#include <stdio.h>

#pragma comment(lib, "delayimp")
#pragma comment(lib, "MyDll")
int main()
{
    BOOL TestReturn;
    // MyDLL.DLL will load at this point
    fnMyDll();

    //MyDLL.dll will unload at this point
    TestReturn = __FUnloadDelayLoadedDLL2("MyDll.dll");
   
    if (TestReturn)
        printf_s("\nDLL was unloaded");
    else
        printf_s("\nDLL was not unloaded");
}

التعليقات

ملاحظات هامة تشغيل إلغاء تم تحميله ملف DLL تحميله بالتأخير:

  • يمكنك العثور على تطبيق دالة __FUnloadDelayLoadedDLL2 في ملف\VC7\تضمين\DELAYHLP.CPP.

  • معلمة اسم دالة __FUnloadDelayLoadedDLL2 يجب أن تطابق تماما (بما فيها أحرف) يتضمن المكتبة استيراد (هذه السلسلة هو أيضا في جدول استيراد في الصورة). يمكنك عرض محتويات مكتبة استيراد مع من /التوابع DUMPBIN. في حالة تطابق سلسلة تحسس حالة الأحرف هو ترغب في ذلك، يمكنك تحديث __FUnloadDelayLoadedDLL2 باستخدام إحدى دالات سلاسل CRT أو استدعاء واجهة برمجة تطبيقات Windows.

يؤدي إلغاء تم تحميله DLL تأخير-تم تم تحميلهه لمشاهدة المزيد المعلومات.

راجع أيضًا:

المبادئ

الرابط الدعم لمكتبات الارتباط الديناميكي المحملة بتأخير