Importação de dados usando o __declspec(dllimport)
No caso de dados, usando __declspec(dllimport) é um item de conveniência que remove uma camada de indireção. Quando você importa dados de uma DLL, você ainda tem percorra a tabela de endereços de importação. Antes de __declspec(dllimport), isso significava que tinha que se lembrar de fazer um nível extra de indireção quando acessar os dados exportados da DLL:
// project.h
#ifdef _DLL // If accessing the data from inside the DLL
ULONG ulDataInDll;
#else // If accessing the data from outside the DLL
ULONG *ulDataInDll;
#endif
Você poderia exportar os dados no seu.Arquivo DEF:
// project.def
LIBRARY project
EXPORTS
ulDataInDll CONSTANT
e acessá-lo fora a 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 se preocupar sobre as etapas acima. Conforme mencionado anteriormente, não use __declspec(dllimport) declaração nos dados ao criar a DLL. 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 essa declaração:
__declspec(dllexport) ULONG ulDataInDLL;