LoadLibrary e AfxLoadLibrary
Processos chamam LoadLibrary ou LoadLibraryEx para vincular explicitamente a uma DLL. (Os aplicativos MFC utilizam AfxLoadLibrary ou AfxLoadLibraryEx.) Se a função for bem-sucedida, ela mapeará a DLL especificada dentro do espaço de endereço do processo de chamada e retornará um identificador para a DLL. O identificador é exigido em outras funções usadas para vinculação explícita, como por exemplo, GetProcAddress
e FreeLibrary
. Para obter mais informações, confira Vinculação explícita.
LoadLibrary
tenta localizar a DLL usando a mesma sequência de pesquisa usada para vinculação implícita. LoadLibraryEx
proporciona mais controle sobre a ordem do caminho de pesquisa. Para obter mais informações, confira Ordem de pesquisa da biblioteca de vínculo dinâmico. Se o sistema não puder encontrar a DLL ou se a função de ponto de entrada retornar FALSE, LoadLibrary
retornará NULL. Se a chamada para LoadLibrary
especificar um módulo DLL que já esteja mapeado para o espaço de endereço do processo de chamada, a função retornará um identificador da DLL e incrementará a contagem de referência do módulo.
Se a DLL tiver uma função de ponto de entrada, o sistema operacional chamará a função no contexto do thread que chamou LoadLibrary
ou LoadLibraryEx
. A função de ponto de entrada não será chamada se a DLL já estiver anexada ao processo. Isso acontece quando uma chamada anterior para LoadLibrary
ou LoadLibraryEx
para a DLL não teve uma chamada correspondente para a função FreeLibrary
.
Para aplicativos MFC que carregam DLLs de extensão MFC, recomendamos que você utilize AfxLoadLibrary
ou AfxLoadLibraryEx
em vez de LoadLibrary
ou LoadLibraryEx
. As funções MFC lidam com a sincronização de threads antes de carregar explicitamente a DLL. As interfaces (protótipos de função) para AfxLoadLibrary
e AfxLoadLibraryEx
são as mesmas que LoadLibrary
e LoadLibraryEx
.
Se o Windows não puder carregar a DLL, o processo tentará se recuperar do erro. Por exemplo, ele poderá notificar o usuário sobre o erro e solicitar outro caminho para a DLL.
Importante
Lembre-se de especificar o caminho completo de todas DLLs. O diretório atual pode ser pesquisado primeiro quando os arquivos são carregados por LoadLibrary
. Se você não qualificar totalmente o caminho do arquivo, um arquivo diferente do pretendido poderá ser carregado. Ao criar uma DLL, use a opção do vinculador /DEPENDENTLOADFLAG para especificar uma ordem de pesquisa para dependências de DLL vinculadas estaticamente. Nas DLLs, use os dois caminhos completos para carregar dependências explicitamente e os parâmetros de chamada LoadLibraryEx
ou AfxLoadLibraryEx
para especificar a ordem de pesquisa do módulo. Para obter mais informações, confira Segurança da biblioteca de vínculo dinâmico e Ordem de pesquisa da biblioteca de vínculo dinâmico.