Usando arquivos de definição de importação

Se você optar por usar __declspec(dllimport) juntamente com um arquivo. def, você deve alterar o arquivo. def para usar dados no lugar da constante para reduzir a probabilidade de que a codificação incorreta fará com que um problema:

// project.def
LIBRARY project
EXPORTS
   ulDataInDll   DATA

A tabela a seguir mostra o porquê.

Keyword

Emite na biblioteca de importação

Exportações

CONSTANT

_imp_ulDataInDll_ulDataInDll

_ulDataInDll

DATA

_imp_ulDataInDll

_ulDataInDll

Usando __declspec(dllimport) e constante de listas de ambos os imp biblioteca que é criada para permitir a vinculação explícita de importação de versão e o nome não decorado na DLL. lib. Usando __declspec(dllimport) e listas de dados apenas o imp versão do nome.

Se você usar a constante, uma das seguintes construções de código pode ser usada para acesso 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 os dados em seu arquivo. def, somente o código compilado com a seguinte definição pode acessar a variável ulDataInDll:

__declspec(dllimport) ULONG ulDataInDll;

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

Usando a constante é o mais arriscado porque se você esquecer de usar o nível extra de indireção, você pode acessar o ponteiro da tabela de endereço de importação para a variável — não a variável. Esse tipo de problema freqüentemente pode se manifestar como uma violação de acesso porque a tabela de endereços de importação é feita no momento somente leitura pelo compilador e vinculador.

O vinculador do Visual C++ atual emitirá um aviso se ele vê constante no arquivo. def para a conta para esta ocorrência. A razão real apenas para usar a constante é se não for possível recompilar algum arquivo de objeto onde o arquivo de cabeçalho lista __declspec(dllimport) no protótipo.

Consulte também

Conceitos

Importar para um aplicativo