Função GetProcAddress (libloaderapi.h)
Recupera o endereço de uma função exportada (também conhecida como procedimento) ou variável da DLL (biblioteca de vínculo dinâmico) especificada.
Sintaxe
FARPROC GetProcAddress(
[in] HMODULE hModule,
[in] LPCSTR lpProcName
);
Parâmetros
[in] hModule
Um identificador para o módulo DLL que contém a função ou a variável. A função LoadLibrary, LoadLibraryEx, LoadPackagedLibrary ou GetModuleHandle retorna esse identificador.
A função GetProcAddress não recupera endereços de módulos que foram carregados usando o sinalizador LOAD_LIBRARY_AS_DATAFILE . Para obter mais informações, consulte LoadLibraryEx.
[in] lpProcName
A função ou o nome da variável ou o valor ordinal da função. Se esse parâmetro for um valor ordinal, ele deverá estar na palavra de ordem baixa; a palavra de ordem alta deve ser zero.
Retornar valor
Se a função for bem-sucedida, o valor retornado será o endereço da função ou variável exportada.
Se a função falhar, o valor retornado será NULL. Para obter informações de erro estendidas, chame GetLastError.
Comentários
A ortografia e o caso de um nome de função apontado por lpProcName devem ser idênticos aos da instrução EXPORTS do arquivo de definição de módulo (.def) da DLL de origem. Os nomes exportados de funções podem ser diferentes dos nomes que você usa ao chamar essas funções em seu código. Essa diferença é ocultada por macros usadas nos arquivos de cabeçalho do SDK. Para obter mais informações, consulte Convenções para protótipos de função.
O parâmetro lpProcName pode identificar a função DLL especificando um valor ordinal associado à função na instrução EXPORTS . GetProcAddress verifica se o ordinal especificado está no intervalo 1 até o valor ordinal mais alto exportado no arquivo .def. Em seguida, a função usa o ordinal como um índice para ler o endereço da função de uma tabela de funções.
Se o arquivo .def não numerar as funções consecutivamente de 1 para N (em que N é o número de funções exportadas), poderá ocorrer um erro em que GetProcAddress retorna um endereço não NULL inválido, mesmo que não haja nenhuma função com o ordinal especificado.
Se a função pode não existir no módulo DLL, por exemplo, se a função estiver disponível apenas no Windows Vista, mas o aplicativo puder estar em execução no Windows XP, especifique a função por nome em vez de pelo valor ordinal e projete seu aplicativo para lidar com o caso quando a função não estiver disponível, conforme mostrado no fragmento de código a seguir.
typedef void (WINAPI *PGNSI)(LPSYSTEM_INFO);
// Call GetNativeSystemInfo if supported or GetSystemInfo otherwise.
PGNSI pGNSI;
SYSTEM_INFO si;
ZeroMemory(&si, sizeof(SYSTEM_INFO));
pGNSI = (PGNSI) GetProcAddress(
GetModuleHandle(TEXT("kernel32.dll")),
"GetNativeSystemInfo");
if(NULL != pGNSI)
{
pGNSI(&si);
}
else
{
GetSystemInfo(&si);
}
Para obter o exemplo completo que contém esse fragmento de código, consulte Obtendo a versão do sistema.
Exemplos
Para obter um exemplo, consulte Usando Run-Time Vinculação Dinâmica.
Requisitos
Cliente mínimo com suporte | Windows XP [aplicativos da área de trabalho | aplicativos UWP] |
Servidor mínimo com suporte | Windows Server 2003 [aplicativos da área de trabalho | Aplicativos UWP] |
Plataforma de Destino | Windows |
Cabeçalho | libloaderapi.h (inclua Windows.h) |
Biblioteca | Kernel32.lib |
DLL | Kernel32.dll |
Confira também
Funções de biblioteca de vínculo dinâmico