Compartilhar via


Importando usando arquivos DEF

Se você optar por usar __declspec(dllimport) junto com um arquivo .def, modifique o arquivo .def para usar ser incluída no lugar de CONSTANTE para reduzir a probabilidade da codificação incorreta causará um problema:

// project.def
LIBRARY project
EXPORTS
   ulDataInDll   DATA

A tabela a seguir mostra como.

Palavra-Chave

Emite na biblioteca de importação

Exporta

CONSTANT

_imp_ulDataInDll_ulDataInDll

_ulDataInDll

DATA

_imp_ulDataInDll

_ulDataInDll

Usando __declspec(dllimport) e a lista CONSTANTE a versão de imp e o nome undecorated na biblioteca de importação da DLL de .lib que é criada para permitir vincular explícito. Usando __declspec(dllimport) e listas DATA apenas a versão de imp do nome.

Se você usar a CONSTANTE, qualquer uma das construções de código pode ser usada para acessar ulDataInDll:

__declspec(dllimport) ULONG ulDataInDll; /*prototype*/
if (ulDataInDll == 0L)   /*sample code fragment*/

- ou -

ULONG *ulDataInDll;      /*prototype*/
if (*ulDataInDll == 0L)  /*sample code fragment*/

No entanto, se você usar DATA no arquivo .def, somente o código compilado com a seguinte definição pode acessar ulDataInDllvariável:

__declspec(dllimport) ULONG ulDataInDll;

if (ulDataInDll == 0L)   /*sample code fragment*/

Usar a CONSTANTE é mais arriscada pois se você esquecer usar o nível de nomes indiretos adicional, você poderia acessar o ponteiro de tabela de endereço de importação para a variável — não a variável próprio. Esse tipo de problema pode frequentemente manifestar como uma violação de acesso como a tabela de endereço de importação é feita somente leitura no momento pelo compilador e pelo vinculador.

O vinculador atual do Visual C++ emite um aviso se consulte a CONSTANTE no arquivo .def para considerar estas caixas. O único motivo real usar a CONSTANTE se você não pode recompilar um arquivo de objeto onde o arquivo de cabeçalho não listados __declspec(dllimport) no protótipo.

Consulte também

Conceitos

Importando para um aplicativo