Udostępnij za pośrednictwem


Zmiany w funkcjach pomocnika opóźnionego załadunku bibliotek DLL po Visual C++ 6.0

Jeśli masz wiele wersji programu Visual C++ na komputerze lub jeśli zdefiniowana funkcja helper, użytkownik może mieć wpływ zmian wprowadzonych do biblioteki DLL opóźnione podczas ładowania funkcji pomocnika.Na przykład:

  • __delayLoadHelper jest teraz __delayLoadHelper2

  • __pfnDliNotifyHook jest teraz __pfnDliNotifyHook2

  • __pfnDliFailureHook jest teraz __pfnDliFailureHook2

  • __FUnloadDelayLoadedDLL jest teraz __FUnloadDelayLoadedDLL2

[!UWAGA]

Jeśli używasz domyślnej funkcji pomocnika te zmiany nie wpływają na Ciebie.Nie ma żadnych zmian dotyczących jak wywołać program łączący.

Wiele wersji programu Visual C++

Jeśli masz wiele wersji programu Visual C++ na komputerze, upewnij się, że program łączący pasuje do delayimp.lib.Jeśli występuje niezgodność, otrzymają błąd linker zgłoszenie albo ___delayLoadHelper2@8 lub ___delayLoadHelper@8 jako nierozwiązane symbol zewnętrznych.Pierwsza oznacza nowy program łączący ze starego delayimp.lib, a te ostatnie oznacza stary linker z nowych delayimp.lib.

Jeśli pojawi się błąd nierozwiązane linker Uruchom dumpbin /linkermember: 1 na delayimp.lib, które mają zawierać funkcję pomocnika, aby zobaczyć, która funkcja helper jest zdefiniowane w zamian.Funkcja helper może być również określone w pliku obiektu; Uruchom dumpbin /symbols i wyszukać delayLoadHelper(2).

Jeśli wiesz, że masz linker Visual C++ 6.0, a następnie:

  • Aby uruchomić dumpbin pliku .lib lub .obj pomocnika obciążenia opóźnienie do określenia, czy definiuje __delayLoadHelper2.W przeciwnym razie łącze zakończy się niepowodzeniem.

  • Definiowanie __delayLoadHelper w opóźnienie załadować pliku .lib lub .obj osoby pomagającej.

Funkcja zdefiniowana przez użytkownika pomocnika

Jeśli zdefiniowana funkcja helper i są przy użyciu bieżącej wersji programu Visual C++, wykonaj następujące czynności:

  • Zmień nazwę funkcji pomocnika do __delayLoadHelper2.

  • Ponieważ wskaźniki w deskryptorze opóźnienia (ImgDelayDescr w delayimp.h) zostały zmienione z adresów bezwzględnych (kanalików) na względne adresy (RVAs), aby działać zgodnie z oczekiwaniami w obu programach 32 - i 64-bitowe, należy przekonwertować te wstecz do wskaźników.Wprowadzono nową funkcję: PFromRva w delayhlp.cpp.Ta funkcja na każde z pól w deskryptorze służy do przekonwertować z powrotem albo wskaźniki 32 - lub 64-bitowych.Domyślne opóźnienie obciążenia pomocnika funkcji nadal jest dobry szablon ma zostać użyty jako przykład.

Załaduj cały przywóz dla biblioteki DLL załadowane opóźnienie

Program łączący można załadować całego przywozu z biblioteki DLL określona do opóźnień załadowany.Zobacz Ładowanie całego przywozu dla biblioteki DLL Delay-Loaded uzyskać więcej informacji.

Zobacz też

Informacje

Ogólne informacje funkcji Pomocnik