Partilhar via


Importando dados usando __declspec(dllimport)

No caso de dados, o uso de __declspec(dllimport) é um item de conveniência que remove uma camada de indireção. Ao importar dados de uma DLL, você ainda precisará passar pela tabela de endereços de importação. Antes de __declspec(dllimport), isso significava que era necessário se lembrar de fazer um nível extra de indireção ao acessar dados exportados da DLL:

// project.h
// Define PROJECT_EXPORTS when building your DLL
#ifdef PROJECT_EXPORTS   // If accessing the data from inside the DLL
   ULONG ulDataInDll;

#else         // If accessing the data from outside the DLL
   ULONG *ulDataInDll;
#endif

Em seguida, você exportaria os dados para o Arquivo .DEF:

// project.def
LIBRARY project
EXPORTS
   ulDataInDll   CONSTANT

e acessaria-o fora da DLL:

if (*ulDataInDll == 0L)
{
   // Do stuff here
}

Quando você marca os dados como __declspec(dllimport), o compilador gera automaticamente o código de indireção para você. Você não precisa mais se preocupar com as etapas acima. Conforme indicado anteriormente, não use a declaração __declspec(dllimport) nos dados ao criar a DLL. As funções dentro da DLL não usam a tabela de endereços de importação para acessar o objeto de dados; portanto, você não terá o nível extra de indireção presente.

Para exportar os dados automaticamente da DLL, use esta declaração:

// project.h
// Define PROJECT_EXPORTS when building your DLL
#ifdef PROJECT_EXPORTS   // If accessing the data from inside the DLL
   __declspec(dllexport) ULONG ulDataInDLL;

#else         // If accessing the data from outside the DLL
   __declspec(dllimport) ULONG ulDataInDLL;
#endif

Confira também

Importando para um aplicativo