Compartilhar via


AfxLoadLibrary

Use AfxLoadLibrary para mapear um módulo DLL.

HINSTANCE AFXAPI AfxLoadLibrary(
   LPCTSTR lpszModuleName 
);

Parâmetros

  • lpszModuleName
    Aponta para uma cadeia terminada com nulo que contém o nome do módulo (qualquer um.DLL ou.Arquivo EXE).O nome especificado é o nome do arquivo do módulo.

    Se a seqüência de caracteres Especifica um caminho, mas o arquivo não existe no diretório especificado, a função falhará.

    Se um caminho não for especificado e a extensão de nome de arquivo for omitida, a extensão padrão.DLL é acrescentado.No entanto, a seqüência de caracteres de nome de arquivo pode incluir um caractere à direita do ponto (.) para indicar que o nome do módulo tem sem extensão.Quando nenhum caminho for especificado, a função procura o arquivo na seqüência a seguir:

    • O diretório do qual o aplicativo é carregado.

    • O diretório atual.

    • Windows 95/98: diretório de sistema do Windows.Windows NT: o diretório de sistema do Windows de 32 bits.O nome deste diretório é SYSTEM32.

    • Somente de Windows NT: diretório de sistema do Windows A 16 bits.Não há nenhuma função Win32 que obtém o caminho desta pasta, mas é pesquisado.O nome deste diretório é o sistema.

    • O diretório do Windows.

    • Diretórios listados na variável de ambiente PATH.

Valor de retorno

Se a função tiver êxito, o valor de retorno é um identificador para o módulo.Se a função falhar, o valor de retorno é NULL.

Comentários

Ele retorna um identificador que pode ser usado em GetProcAddress para obter o endereço de uma função DLL.AfxLoadLibrarytambém pode ser usado para mapear outros módulos executáveis.

Cada processo mantém uma contagem de referência para cada módulo carregado biblioteca.A contagem de referência é incrementada cada vez AfxLoadLibrary é chamado e é decrementado sempre AfxFreeLibrary é chamado.Quando a contagem de referência atinge zero, o módulo é não mapeado no espaço de endereço do processo de chamada e o identificador não é válido.

Certifique-se de usar AfxLoadLibrary e AfxFreeLibrary (em vez de funções Win32 LoadLibrary e FreeLibrary) se seu aplicativo usa vários threads e se ele dinamicamente carrega uma extensão DLL.Usando AfxLoadLibrary e AfxFreeLibrary assegura que o código de inicialização e desligamento que executa quando a extensão DLL é carregada e descarregada não corromper o estado global do MFC.

Usando AfxLoadLibrary em um aplicativo requer que você vincular dinamicamente para a versão da DLL do MFC; o arquivo de cabeçalho para AfxLoadLibrary, Afxdll_.h, só é incluído se o MFC está vinculada ao aplicativo como uma DLL.Isso ocorre porque é necessário vincular a versão de DLL do MFC para usar ou criar DLLs de extensão.

Exemplo

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

Requisitos

Cabeçalho: afxdll_.h

Consulte também

Referência

AfxFreeLibrary

Conceitos

Globais e Macros do MFC