AfxLoadLibrary

Use AfxLoadLibrary para mapear um módulo DLL.

HINSTANCE AFXAPI AfxLoadLibrary(
   LPCTSTR lpszModuleName 
);

Parâmetros

  • lpszModuleName
    Aponta para uma seqüência de caracteres terminada com nulo que contém o nome do módulo (arquivo uma .dll ou .exe).O nome especificado é o nome do arquivo do módulo.

    Se a seqüência 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 é anexada.No entanto, a seqüência de caracteres de nome de arquivo pode incluir um caractere precedente ponto (.) para indicar que o nome do módulo possui sem extensão.Quando nenhum caminho for especificado, a função de procura o arquivo na sequência a seguir:

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

    • O diretório corrente.

    • O Windows 95/98: O diretório de sistema do Windows.Windows NT: O diretório de sistema do Windows de 32 bit.O nome deste diretório é System32.

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

    • O diretório do Windows.

    • Os diretórios que estão listados na variável de ambiente caminho.

Valor de retorno

Se a função obtiver êxito, o valor retornado é um identificador para o módulo.Se a função falhar, o valor retornado será nulo.

Comentários

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

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

Certifique-se de usar AfxLoadLibrary e AfxFreeLibrary (em vez das funções do Win32 LoadLibrary and FreeLibrary) Se seu aplicativo utiliza vários threads e se ele dinamicamente carrega uma DLL de extensão.Usando AfxLoadLibrary e AfxFreeLibrary assegura que o código de inicialização e desligado que é executado quando a DLL de extensão é carregado e descarregado não corromper o estado global do MFC.

Usando AfxLoadLibrary em um aplicativo exige que você vincular dinamicamente para a versão DLL do MFC; arquivo de cabeçalho AfxLoadLibraryAfxdll_.h, só será incluído se o MFC está vinculado ao aplicativo sistema autônomo uma DLL. Isso ocorre por design, porque é necessário vincular para a versão 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

Conceitos

Macros do MFC e globais

Referência

AfxFreeLibrary