Condividi tramite


AfxLoadLibrary

Utilizzo AfxLoadLibrary eseguire il mapping di un modulo DLL.

HINSTANCE AFXAPI AfxLoadLibrary(
   LPCTSTR lpszModuleName 
);

Parametri

  • lpszModuleName
    Punta a una stringa con terminazione null che contiene il nome del modulo (DLL o EXE).Il nome specificato è il nome file del modulo.

    Se la stringa specifica un percorso ma il file non esiste nella directory specificata, la funzione ha esito negativo.

    Se non viene specificato e l'estensione del file viene omessa, l'estensione predefinita è tuttavia consigliabile accodata.Tuttavia, la stringa del nome file può includere un carattere finale del punto (.) per indicare che il nome del modulo non ha estensione.Quando invece non viene specificato alcun percorso, cerca di funzione del file nella seguente sequenza:

    • La directory da cui l'applicazione ha caricato.

    • La directory corrente.

    • Windows 95/98: la directory di sistema di Windows.Windows NT: la directory di sistema di Windows a 32 bit.Il nome della directory in SYSTEM32.

    • Windows NT only: la directory di sistema di Windows a 16 bit.Non esiste una funzione Win32 che ottiene il percorso di questa directory, ma viene trovato.Il nome di questa directory è SYSTEM.

    • La directory Windows.

    • Le directory elencate nella variabile di ambiente PATH.

Valore restituito

Se la funzione ha esito positivo, il valore restituito è handle del modulo.Se la funzione ha esito negativo, il valore restituito è NULL.

Note

Restituisce un handle che possono essere utilizzate in GetProcAddress per ottenere l'indirizzo di una funzione di DLL.AfxLoadLibrary può essere utilizzato per eseguire il mapping altri moduli eseguibili.

Ogni processo gestisce un conteggio dei riferimenti per ogni modulo di libreria caricate.Questo conteggio dei riferimenti viene incrementato ogni volta AfxLoadLibrary è denominato ed è AfxFreeLibrary ogni volta che viene decrementato viene chiamato.Quando il conteggio dei riferimenti arriva a zero, il modulo non è mappato allo spazio degli indirizzi del processo chiamante e handle non è più valido.

Accertarsi di utilizzare AfxLoadLibrary e AfxFreeLibrary (anziché le funzioni Win32 LoadLibrary e FreeLibrary) se l'applicazione utilizza più thread e se viene caricata in modo dinamico una DLL di estensione.Utilizzando AfxLoadLibrary e di AfxFreeLibrary assicura che nel codice di avvio e di chiusura eseguito quando la DLL di estensione viene caricato e scaricato non vi sia nulla che danneggi lo stato MFC globale.

Utilizzando AfxLoadLibrary in un'applicazione richiede del collegamento dinamico alla versione DLL di MFC; il file di intestazione per AfxLoadLibrary, Afxdll_.h, è incluso solo se MFC è collegato a l DLL.Si tratta di progettazione perché è necessario accedere alla versione DLL di MFC per utilizzare o per creare le DLL di estensione.

Esempio

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

Requisiti

Header: afxdll_.h

Vedere anche

Riferimenti

AfxFreeLibrary

Concetti

Macro MFC e Globals