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.

O que você deseja fazer?

O que você deseja saber mais sobre?

Consulte também

Conceitos

DLLs