Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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