GetProcAddress
Processos explicitamente vinculando a uma DLL telefonar GetProcAddress para obter o endereço de uma função exportado da dll.Use o ponteiro de função retornado para chamar a função DLL.GetProcAddress aceita sistema autônomo parâmetros do módulo DLL identificador (retornado por um dos LoadLibrary, AfxLoadLibrary, ou GetModuleHandle) e leva ambos o nome da função que você deseja que a telefonar ou de exportar da função ordinal.
Como você está chamando a função de DLL por meio de um ponteiro e não houver nenhuma verificação de tipos em time de compilar, certifique-se de que os parâmetros para a função estão corretos para que você overstep a memória alocada na pilha e causar uma violação de acesso.Uma maneira para ajudar a fornecer segurança de tipos é examinar os protótipos de função das funções exportadas e criar typedefs correspondentes para os ponteiros de função.Por exemplo:
typedef UINT (CALLBACK* LPFNDLLFUNC1)(DWORD,UINT);
...
HINSTANCE hDLL; // Handle to DLL
LPFNDLLFUNC1 lpfnDllFunc1; // Function pointer
DWORD dwParam1;
UINT uParam2, uReturnVal;
hDLL = LoadLibrary("MyDLL");
if (hDLL != NULL)
{
lpfnDllFunc1 = (LPFNDLLFUNC1)GetProcAddress(hDLL,
"DLLFunc1");
if (!lpfnDllFunc1)
{
// handle the error
FreeLibrary(hDLL);
return SOME_ERROR_CODE;
}
else
{
// call the function
uReturnVal = lpfnDllFunc1(dwParam1, uParam2);
}
}
Como especificar a função desejada ao chamar GetProcAddress depende de como a DLL foi criada.
Você pode obter a ordinal de exportar somente se a DLL que você está estabelecendo vínculo é criada com um arquivo de definição (.def) de módulo e se os números ordinais são listados com as funções no EXPORTAÇÕES seção do arquivo .def da DLL. De chamadaGetProcAddress com uma exportar ordinal, ao contrário de nome da função, é um pouco mais rápida se a DLL tem muitas funções exportadas porque ordinais exportar servem sistema autônomo índices na tabela de exportar da DLL.Com uma exportar ordinal, GetProcAddress pode localizar a função diretamente ao contrário de comparar o nome especificado para sistema autônomo nomes de função na tabela de exportar da DLL.No entanto, você deve chamar GetProcAddress com ordinal uma exportar somente se você tiver controle sobre a atribuição de números ordinais às funções exportadas no arquivo .def.