Partager via


AfxLoadLibrary

Utilisation AfxLoadLibrary de mapper un module DLL.

HINSTANCE AFXAPI AfxLoadLibrary(
   LPCTSTR lpszModuleName 
);

Paramètres

  • lpszModuleName
    Pointe vers une chaîne terminée par le caractère NULL qui contient le nom du module (une .DLL ou .exe).Le nom spécifié est le nom de fichier du module.

    Si la chaîne spécifie un chemin d'accès et que le fichier n'existe pas dans le répertoire spécifié, la fonction échoue.

    Si un chemin d'accès n'est pas spécifié et l'extension du nom de fichier est omis, la .DLL par défaut d'extension est ajoutée.Toutefois, la chaîne de nom de fichier peut inclure un caractère de fin de point (.) pour indiquer que le nom de module n'a pas d'extension.Lorsque aucun chemin d'accès n'est spécifié, les recherches de fonction pour le fichier dans l'ordre suivant :

    • Le répertoire à partir duquel l'application a chargé.

    • Le répertoire actif.

    • Windows 95/98: le répertoire système de Windows.Windows NT: le répertoire système de Windows 32 bits.Le nom de ce répertoire est SYSTEM32.

    • Windows NT only: le répertoire système de Windows 16 bits.Il n'existe aucune fonction Win32 qui obtient le chemin de ce répertoire, mais il est trouvé.Le nom de ce répertoire est SYSTEM.

    • Le répertoire Windows.

    • Les répertoires qui sont répertoriés dans la variable d'environnement PATH.

Valeur de retour

Si la fonction réussit, la valeur de retour est un handle vers le module.Si la fonction échoue, la valeur de retour est NULL.

Notes

Il retourne un handle qui peut être utilisé dans GetProcAddress pour obtenir l'adresse d'une fonction DLL.AfxLoadLibrary peut également être utilisé pour mapper d'autres modules exécutables.

Chaque processus contient un décompte de références pour chaque module chargé de bibliothèque.Ce compteur de références est incrémenté à chaque fois que AfxLoadLibrary est appelé et est décrémenté chaque fois AfxFreeLibrary est appelé.Lorsque le décompte de références atteint zéro, le module est non mappés de l'espace d'adressage du processus appelant et le handle n'est plus valide.

Veillez à utiliser AfxLoadLibrary et AfxFreeLibrary (au lieu de Win32 s'exécute LoadLibrary et FreeLibrary) si votre application utilise plusieurs threads et si elle chargera dynamiquement une DLL d'extension.À l'aide de AfxLoadLibrary et AfxFreeLibrary assurer que le code de démarrage et d'arrêt qui s'exécute lorsque la DLL d'extension est chargé et du déchargement n'altère pas l'état global des MFC.

À l'aide de AfxLoadLibrary dans une application vous demande de liaison dynamique avec la version DLL de MFC ; le fichier d'en-tête pour AfxLoadLibrary, Afxdll_.h, est inclus uniquement si MFC est lié à l'application en tant que DLL.Cela est dû au design car vous devez lier à la version DLL de MFC pour utiliser ou pour créer les DLL d'extension.

Exemple

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

Configuration requise

Header: afxdll_.h

Voir aussi

Référence

AfxFreeLibrary

Concepts

Macro MFC et Globals