Partilhar via


AfxLoadLibrary

Use AfxLoadLibrary para mapear um módulo DLL.

HINSTANCE AFXAPI AfxLoadLibrary( 
   LPCTSTR lpszModuleName  
);

Parâmetros

  • lpszModuleName
    Aponta para uma cadeia de caracteres com terminação nula que contém o nome do módulo (um .DLL ou arquivo .exe). O nome especificado é o nome de arquivo do módulo.

    Se a cadeia de caracteres especificar um caminho mas o arquivo não existir no diretório especificado, a função falhará.

    Se um caminho não for especificado e a extensão de nome de arquivo é omitida, a extensão padrão .DLL será anexada. No entanto, a cadeia de caracteres de nome de arquivo pode incluir um caractere à direita do ponto (.) para indicar que o nome do módulo não tem nenhuma extensão. Quando nenhum caminho for especificado, a função pesquisa do arquivo na seguinte sequência:

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

    • O diretório atual.

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

    • Windows NT only: o diretório do sistema de 16 bits do windows. Não há nenhuma função do Win32 que obtém o caminho do diretório, mas é pesquisado. O nome desse diretório é SYSTEM.

    • O diretório do Windows.

    • Os 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 for NULL.

Comentários

Retorna um identificador que pode ser usado em GetProcAddress para obter o endereço de uma função da DLL. AfxLoadLibrary també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 da biblioteca. Essa contagem de referência é incrementado sempre que AfxLoadLibrary é chamado e é decrementado AfxFreeLibrary sempre é chamado. Quando a contagem de referência chegar a zero, o módulo não foi mapeada de espaço de endereço do processo de chamada e ao identificador não é mais válida.

Certifique-se de usar AfxLoadLibrary e AfxFreeLibrary (em vez do Win32 funcionam LoadLibrary e FreeLibrary) se seu aplicativo usa vários threads e se carrega dinamicamente uma DLL da extensão. Usar AfxLoadLibrary e AfxFreeLibrary garante que a inicialização e o desligamento código que executa a DLL de extensão é carregado e descarregado não compromete o estado global de MFC.

Usar AfxLoadLibrary em um aplicativo exige que você vincular dinamicamente a versão da DLL MFC; o arquivo de cabeçalho para AfxLoadLibrary, Afxdll_.h, é incluído apenas se o MFC está vinculado ao aplicativo como uma DLL. Isso ocorre por design porque tem que indique a versão da DLL MFC para usar ou para criar DLL da 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

Header: afxdll_.h

Consulte também

Referência

AfxFreeLibrary

Conceitos

Macros e globais MFC