Freigeben über


AfxLoadLibrary

Verwendung AfxLoadLibrary, ein DLL-Modul zuzuordnen.

HINSTANCE AFXAPI AfxLoadLibrary(
   LPCTSTR lpszModuleName 
);

Parameter

  • lpszModuleName
    Zeigt auf eine auf NULL endende Zeichenfolge, die den Namen des Moduls enthält (entweder DLL-Datei oder EXE-Datei).Der angegebene Name ist der Dateiname des Moduls.

    Wenn die Zeichenfolge ein Pfad angegeben, aber die Datei nicht im angegebenen Verzeichnis vorhanden ist, schlägt die Funktion aus.

    Wenn ein Pfad nicht angegeben wird und der Dateinamenerweiterung ausgelassen wird, wird die Standarderweiterung .DLL angefügt.Allerdings kann die Dateinamen Zeichenfolge ein nachfolgendes Punkt (.) enthalten Zeichen um anzugeben, dass der Modulname keine Erweiterung enthält.Wenn kein Pfad angegeben ist, wird die Funktion sucht die Datei in der folgenden Reihenfolge:

    • Das Verzeichnis, in dem die Anwendung geladen wurde.

    • Das aktuelle Verzeichnis.

    • Windows 95/98: das Windows-Systemverzeichnis.Windows NT: das 32-Bit-Windows-Systemverzeichnis.Der Name dieses Verzeichnis ist SYSTEM32.

    • Windows NT only: das 16-Bit- Windows-Systemverzeichnis.Es gibt keine Win32-Funktion, die den Pfad für dieses Verzeichnis wird, aber er gefunden wird.Der Name dieses Verzeichnisses SYSTEM ist.

    • Das Windows-Verzeichnis.

    • Die Verzeichnisse, die in der PATH-Umgebungsvariablen aufgeführten.

Rückgabewert

Wenn die Funktion erfolgreich ausgeführt wird, ist der Rückgabewert ein Handle für das Modul.Wenn die Funktion fehlschlägt, ist der Rückgabewert NULL.

Hinweise

Es gibt ein Handle zurück, das in GetProcAddress verwendet werden kann, um die Adresse einer DLL-Funktion abzurufen.AfxLoadLibrary kann auch verwendet werden, um andere ausführbare Module zuzuordnen.

Jeder Prozess verwaltet einen Verweiszähler für jedes geladene Modul Bibliothek gespeichert.Dieser Verweiszähler wird jedes Mal inkrementiert, wenn AfxLoadLibrary aufgerufen wird und dekrementiertes AfxFreeLibrary wird jedes Mal aufgerufen wird.Wenn der Verweiszähler (null) erreicht, wird das Modul im Adressbereich des aufrufenden Prozesses Zuordnung aufgehoben und das Handle ist nicht mehr gültig.

Stellen Sie sicher, AfxLoadLibrary und AfxFreeLibrary zu verwenden (und nicht funktioniert LoadLibrary Win32- und FreeLibrary), wenn die Anwendung mehrere Threads verwendet, und wenn sie dynamisch eine Erweiterungs-DLL laden kann.Verwenden AfxLoadLibrary und AfxFreeLibrary versichert Starten und Herunterfahren, dass der Code, der ausgeführt wird, wenn die Erweiterungs-DLL geladen und entladen wird, den globalen MFC-Zustand nicht beschädigt.

Verwenden AfxLoadLibrary in einer Anwendung müssen Sie auf die DLL-Version von MFC dynamisch zu verknüpfen. Headerdatei für die Afxdll_.h, AfxLoadLibrary wird nur berücksichtigt, wenn MFC zur Anwendung als DLL verknüpft wird.Dies ist mit Absicht, da Sie die DLL-Version von MFC verknüpft werden müssen, um Erweiterungs-DLL zu verwenden oder zu erstellen.

Beispiel

// 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();
}

Anforderungen

Header: afxdll_.h

Siehe auch

Referenz

AfxFreeLibrary

Konzepte

MFC-Makros und -globale Werte