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.

O que você deseja fazer?

Que mais você deseja saber?

Confira também