LoadLibrary i AfxLoadLibrary
Procesy wywołuje metodę LoadLibrary lub LoadLibraryEx , aby jawnie połączyć się z biblioteką DLL. (Korzystanie z aplikacji MFCAfxLoadLibrary lub AfxLoadLibraryEx. Jeśli funkcja powiedzie się, mapuje określoną bibliotekę DLL na przestrzeń adresową procesu wywołującego i zwraca uchwyt do biblioteki DLL. Dojście jest wymagane w innych funkcjach używanych do łączenia jawnego — na przykład GetProcAddress
i FreeLibrary
. Aby uzyskać więcej informacji, zobacz Jawne łączenie.
LoadLibrary
próbuje zlokalizować bibliotekę DLL przy użyciu tej samej sekwencji wyszukiwania, która jest używana do łączenia niejawnego. LoadLibraryEx
zapewnia większą kontrolę nad kolejnością ścieżki wyszukiwania. Aby uzyskać więcej informacji, zobacz Dynamic Link Library Search Order (Kolejność wyszukiwania biblioteki linków dynamicznych). Jeśli system nie może znaleźć biblioteki DLL lub jeśli funkcja punktu wejścia zwraca wartość FALSE, LoadLibrary
zwraca wartość NULL. Jeśli wywołanie LoadLibrary
do określa moduł DLL, który jest już mapowany do przestrzeni adresowej procesu wywołującego, funkcja zwraca uchwyt biblioteki DLL i zwiększa liczbę odwołań modułu.
Jeśli biblioteka DLL ma funkcję punktu wejścia, system operacyjny wywołuje funkcję w kontekście wątku o nazwie LoadLibrary
lub LoadLibraryEx
. Funkcja punktu wejścia nie jest wywoływana, jeśli biblioteka DLL jest już dołączona do procesu. Dzieje się tak, gdy poprzednie wywołanie do LoadLibrary
lub LoadLibraryEx
dla biblioteki DLL nie miało odpowiedniego FreeLibrary
wywołania funkcji.
W przypadku aplikacji MFC, które ładują biblioteki DLL rozszerzeń MFC, zalecamy użycie AfxLoadLibrary
biblioteki lub AfxLoadLibraryEx
zamiast LoadLibrary
lub LoadLibraryEx
. Funkcje MFC obsługują synchronizację wątków przed jawnym załadowaniem biblioteki DLL. Interfejsy (prototypy funkcji) do AfxLoadLibrary
i AfxLoadLibraryEx
są takie same jak LoadLibrary
i LoadLibraryEx
.
Jeśli system Windows nie może załadować biblioteki DLL, proces może podjąć próbę odzyskania po błędzie. Może na przykład powiadomić użytkownika o błędzie, a następnie poprosić o inną ścieżkę do biblioteki DLL.
Ważne
Upewnij się, że określono pełną ścieżkę dowolnych bibliotek DLL. Bieżący katalog może być wyszukiwany jako pierwszy, gdy pliki są ładowane przez LoadLibrary
program . Jeśli nie kwalifikujesz się w pełni do ścieżki pliku, może zostać załadowany plik inny niż zamierzony. Podczas tworzenia biblioteki DLL użyj opcji konsolidatora /DEPENDLOADFLAG , aby określić kolejność wyszukiwania statycznie połączonych zależności dll. W bibliotekach DLL użyj obu pełnych ścieżek, aby jawnie załadować zależności, oraz LoadLibraryEx
AfxLoadLibraryEx
parametry wywołania w celu określenia kolejności wyszukiwania modułu. Aby uzyskać więcej informacji, zobacz Dynamic-Link Library Security and Dynamic Link Library Search Order (Zabezpieczenia biblioteki dynamicznej i dynamiczna kolejność wyszukiwania biblioteki linków dynamicznych).