Sdílet prostřednictvím


AfxLoadLibrary

Použití AfxLoadLibrary mapování knihovnu DLL.

HINSTANCE AFXAPI AfxLoadLibrary(
   LPCTSTR lpszModuleName 
);

Parametry

  • lpszModuleName
    Odkazuje na řetězec zakončený hodnotou null, který obsahuje název modulu (buď.Knihovna DLL nebo.Soubor EXE).Zadaný název je název modulu.

    Pokud řetězec Určuje cestu souboru v zadaném adresáři neexistuje, funkce se nezdaří.

    Pokud není zadána cesta a název souboru příponu vynecháte, bude výchozí rozšíření.DLL je připojen.Řetězec název_souboru však může obsahovat koncové bodu znak (.) označuje, že název modulu nemá žádnou příponu.Pokud není zadán, funkce vyhledá soubor v následujícím pořadí:

    • Adresář, ze kterého aplikace načtena.

    • Aktuální adresář.

    • Windows 95/98: adresáře systému Windows.Windows NT: systémového adresáře Windows 32-bit.Je název tohoto adresáře SYSTEM32.

    • Pouze v systému Windows NT: systémového adresáře Windows 16 bitů.Není žádná funkce Win32, která získá cestu tento adresář, ale je prohledán.Je název tohoto adresáře systému.

    • Adresář systému Windows.

    • Adresáře, které jsou uvedeny v proměnné prostředí PATH.

Vrácená hodnota

Pokud se podaří funkce, vrácená hodnota je popisovač v modulu.Pokud selže funkce, je vrácena hodnota NULL.

Poznámky

Vrátí popisovač použitý v GetProcAddress získat adresu funkce knihovny DLL.AfxLoadLibrarylze také mapování dalších modulů spustitelného souboru.

Každý proces udržuje počet odkazů pro každý modul načíst knihovnu.Tento počet odkazů je zvýšen pokaždé AfxLoadLibrary se nazývá a je snížena při každém AfxFreeLibrary se nazývá.Nula dosáhne počet odkazů je modul nenamapované z adresového prostoru procesu volajícího a již není platný popisovač.

Používejte AfxLoadLibrary a AfxFreeLibrary (namísto funkce Win32 LoadLibrary a FreeLibrary) Pokud aplikace používá více podprocesů, a pokud to dynamicky načítá knihovna DLL rozšíření.Pomocí AfxLoadLibrary a AfxFreeLibrary pojistitelům spouštěcí a ukončovací kód, když je načítání a uvolňování knihoven DLL rozšíření není poškozený globální stav MFC.

Pomocí AfxLoadLibrary aplikace vyžaduje dynamické propojení verze DLL MFC; v záhlaví souboru AfxLoadLibrary, Afxdll_.h, je pouze součástí Pokud MFC je propojen s aplikací jako knihovna DLL.To je záměrné, protože verze knihovny DLL nebo vytvoření knihovny DLL rozšíření MFC propojení.

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

Viz také

Referenční dokumentace

AfxFreeLibrary

Koncepty

MFC makra a Globals