Freigeben über


AfxLoadLibrary

Verwendung von AfxLoadLibrary, ein DLL-Modul zuzuordnen.

HINSTANCE AFXAPI AfxLoadLibrary( 
   LPCTSTR lpszModuleName  
);

Parameter

  • lpszModuleName
    Zeigt auf eine auf NULL endende Zeichenfolge, die den Namen des Moduls enthalten entweder (DLL-Datei oder EXE-Datei). Dieser Name ist der Dateiname des Moduls.

    Wenn die Zeichenfolge einem Pfad angibt, die Datei aber nicht im angegebenen Verzeichnis vorhanden ist, schlägt die Funktion.

    Wenn ein Pfad nicht angegeben wird und die Dateinamenerweiterung weggelassen wird, wird die DLL-Datei Standarderweiterung angefügt. kann jedoch Dateinamenzeichenfolge ein nachfolgendes Punktzeichen (.) enthalten dass der Modulname keine Erweiterung hat. Wurde kein Pfad angegeben, die Funktionssuchen für die Datei in der folgenden Reihenfolge:

    • Das Verzeichnis, von dem die Anwendung geladen wurde.

    • Das aktuelle Verzeichnis.

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

    • Windows NT only: das sowohl --Windows-Systemverzeichnis. Es gibt keine Win32-Funktion, die den Pfad dieses Verzeichnisses erhält, jedoch wird gefunden. Der Name dieses Verzeichnisses ist SYSTEM.

    • Das Windows-Verzeichnis.

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

Rückgabewert

Wenn die Funktion folgt, 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 anderen ausführbaren Modulen zuzuordnen.

Jeder Prozess verwaltet einen Verweiszähler für jedes geladene Bibliotheksmodul bei. Dieser Verweiszählers wird erhöht, wenn AfxLoadLibrary aufgerufen wird und dekrementiertes jedes Mal AfxFreeLibrary wird aufgerufen wird. Wenn der Verweiszähler Null erreicht, wird das Modul im Adressbereich des aufrufenden Prozesses die Zuordnung aufgehoben und das Handle ist nicht mehr gültig.

Stellen Sie sicher, AfxLoadLibrary und AfxFreeLibrary zu verwenden (anstelle der Win32-Funktionen LoadLibrary und FreeLibrary), wenn die Anwendung mehrere Threads verwendet und ob sie eine Erweiterungs-DLL dynamisch lädt. Mit AfxLoadLibrary und AfxFreeLibrary stellt sicher, dass der Code für das Starten und Beenden, ausführt, wenn die Erweiterungs-DLL geladen und entladen den globalen MFC-Zustand nicht beschädigt.

Mit AfxLoadLibrary in einer Anwendung erfordert, dass Sie der DLL-Version von MFC dynamische Verknüpfung; die Headerdatei für AfxLoadLibrary, Afxdll_.h, wird nur eingeschlossen, wenn MFC zur Anwendung als DLL verknüpft wird. Dies ist vorgesehen, weil Sie der DLL-Version von MFC verknüpfen müssen, um Erweiterungs-DLLs verwenden oder 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, globale Funktionen und globale Variablen