AfxLoadLibrary
Použití AfxLoadLibrary k mapování modul knihovny DLL.
HINSTANCE AFXAPI AfxLoadLibrary(
LPCTSTR lpszModuleName
);
Parametry
lpszModuleName
Odkazuje na řetězec zakončený hodnotou null, který obsahuje název modulu (buď.DLL nebo.Soubor EXE).Zadaný název je název souboru modulu.Pokud soubor neexistuje v zadaném adresáři, ale řetězec Určuje cestu, provedení funkce se nezdaří.
Pokud nezadáte cestu a příponu názvu souboru, je tento argument vynechán, je výchozí přípona.DLL je připojen.Řetězec názvu souboru však mohou obsahovat koncové bodu znak (.) označující, že název modulu má bez přípony.Pokud je zadána žádná cesta, funkce vyhledá soubor v následujícím pořadí:
Adresář, ze kterého aplikace načtena.
Aktuální adresář.
Windows 95/98: ze systémového adresáře Windows.Windows NT: adresář systému Windows 32-bit.Název tohoto adresáře je složka SYSTEM32.
Pouze systém Windows NT: adresář systému Windows 16 bitů.Není žádná Win32 funkce, která získá cestu tohoto adresáře, ale je prohledána.Název tohoto adresáře je systém.
Adresář systému Windows.
Adresáře, které jsou uvedeny v proměnné prostředí PATH.
Vrácená hodnota
Pokud funkce úspěšná, vrácená hodnota je popisovač modulu.Pokud selže funkce, vrácená hodnota je NULL.
Poznámky
Vrátí popisovač lze použít v GetProcAddress Chcete-li získat adresu funkce knihovny DLL.AfxLoadLibrarylze také přiřadit jiné spustitelné moduly.
Každý proces udržuje počet odkazů pro každý modul je načten knihovny.Tento počet odkazů je zvýšen pokaždé, když AfxLoadLibrary se nazývá a je snížena pokaždé, když AfxFreeLibrary se nazývá.Pokud počet odkazů dosáhne nuly, modul nenamapované z adresového prostoru volajícího procesu a je již neplatný popisovač.
Je nutné používat AfxLoadLibrary a AfxFreeLibrary (namísto funkce Win32 LoadLibrary a FreeLibrary) Pokud aplikace používá více vláken a načte dynamicky rozšiřující knihovny DLL.Pomocí AfxLoadLibrary a AfxFreeLibrary zajistí, že kód při spuštění a ukončení, který spustí, pokud rozšiřující knihovna DLL načtena a uvolněna, nepoškozuje globální stav knihovny MFC.
Pomocí AfxLoadLibrary v aplikaci je nutné dynamicky propojit na knihovnu DLL verze knihovny MFC; soubor hlaviček pro AfxLoadLibrary, Afxdll_.h, je pouze pokud je knihovna MFC propojena s aplikací jako knihovna DLL zahrnuty.To je záměrné, protože odkaz na knihovnu DLL verze knihovny MFC, chcete-li použít nebo vytvořit rozšiřující knihovny DLL.
Příklad
// 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();
}
Požadavky
Záhlaví: afxdll_.h