AfxLoadLibrary
Użyj AfxLoadLibrary do mapowania modułu DLL.
HINSTANCE AFXAPI AfxLoadLibrary(
LPCTSTR lpszModuleName
);
Parametry
lpszModuleName
Wskazuje ciąg zakończony znakiem null, zawierający nazwę modułu (albo.Biblioteka DLL lub.Plik EXE).Określona nazwa jest nazwą pliku modułu.Jeśli ciąg Określa ścieżkę, ale plik nie istnieje w określonym katalogu, funkcja kończy się niepowodzeniem.
Jeżeli nie określono ścieżki i rozszerzenie nazwy pliku zostanie pominięty, domyślne rozszerzenie.Biblioteka DLL jest dołączana.Jednakże ciąg nazwy pliku może zawierać końcowy znak punkt (.), aby wskazać, że nazwa modułu nie ma rozszerzenia.Nie określono ścieżki, funkcja Wyszukiwanie plików w następującej kolejności:
Katalog, z którego ładowany jest aplikacja.
Bieżący katalog.
Windows 95/98: katalogu systemu Windows.Windows NT: katalogu systemowym Windows 32-bitowych.Nazwa katalogu jest SYSTEM32.
Windows NT: katalogu systemowym Windows 16-bitowym.Nie ma żadnej funkcji Win32, który uzyskuje ścieżkę katalogu, ale wyszukiwana jest.Nazwa katalogu jest SYSTEM.
Katalog Windows.
Katalogi wymienione w zmiennej środowiskowej PATH.
Wartość zwracana
Jeśli funkcja się powiedzie, zwracana jest wartość uchwytu do modułu.Jeśli funkcja zawiedzie, zwracana jest wartość NULL.
Uwagi
Zwraca uchwyt, który może być używany w GetProcAddress uzyskać adresu funkcji DLL.AfxLoadLibrarymoże być również używany do mapowania innych modułów wykonywalnych.
Każdy proces przechowuje licznika odwołań dla każdego modułu załadowanego biblioteki.Tego licznika odwołań jest zwiększany przy każdym AfxLoadLibrary nazywa się i jest zmniejszany przy każdym AfxFreeLibrary jest wywoływana.Gdy licznika odwołań osiągnie zero, moduł jest wyłączane z przestrzeni adresowej procesu wywołującego i dojście nie jest już prawidłowy.
Należy użyć AfxLoadLibrary i AfxFreeLibrary (zamiast funkcji Win32 LoadLibrary i FreeLibrary) Jeśli aplikacja korzysta z wielu wątków i dynamicznie ładuje rozszerzeniem DLL.Za pomocą AfxLoadLibrary i AfxFreeLibrary gwarantują, że kod uruchamiania i zamykania, który jest wykonywany, gdy biblioteka DLL rozszerzenia jest załadowane lub wyładowane nie doprowadzić do uszkodzenia globalnego MFC.
Za pomocą AfxLoadLibrary w aplikacji wymaga dynamiczne łącze do wersji biblioteki DLL MFC; Plik nagłówka dla AfxLoadLibrary, Afxdll_.h, jest tylko jeżeli MFC jest związane z zastosowaniem jako biblioteki DLL.To jest zgodne z projektem, ponieważ łącze do wersji biblioteki DLL MFC lub utworzeniu bibliotek DLL rozszerzeń.
Przykład
// The following shows how to create a MDI based application
// using a generic CView derived class that is implemented in
// a dynamically loaded MFC Extension DLL.
typedef CRuntimeClass * (*GETDLLVIEW)();
BOOL CUserApp::InitInstance()
{
// Standard Application Wizard generated initialization excluded.
...
// Register the application's document templates. Document templates
// serve as the connection between documents, frame windows and views
//Load MFC Extension DLL based view class.
m_hViewDll = AfxLoadLibrary(szMyViewDllPath);
if (!m_hViewDll)
{
CString str;
str.Format(_T("Error: Cannot find component %s"), szMyViewDllPath);
AfxMessageBox(str);
return FALSE;
}
GETDLLVIEW GetMyView = (GETDLLVIEW)GetProcAddress(m_hViewDll, "GetMyView");
ASSERT(GetMyView != NULL);
CMultiDocTemplate* pDocTemplate;
pDocTemplate = new CMultiDocTemplate(IDR_NVC_MFC_DLLUserTYPE,
RUNTIME_CLASS(CUserDoc),
RUNTIME_CLASS(CChildFrame), // custom MDI child frame
GetMyView());
if (!pDocTemplate)
return FALSE;
AddDocTemplate(pDocTemplate);
// Standard Application Wizard generated initalization excluded.
...
return TRUE;
}
int CUserApp::ExitInstance()
{
if (NULL != m_hViewDll)
{
AfxFreeLibrary(m_hViewDll);
m_hViewDll = NULL;
}
return CWinApp::ExitInstance();
}
Wymagania
Nagłówek: afxdll_.h