Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Importando dados usando
No caso dos dados, o uso __declspec(dllimport) é um item de conveniência que remove uma camada de indireção. Quando você importa dados de uma DLL, você ainda precisa passar pela tabela de endereços de importação. Antes __declspec(dllimport), isso significava que você tinha que 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, exportaria os dados no seu ficheiro .DEF:
// project.def
LIBRARY project
EXPORTS
ulDataInDll CONSTANT
e acessá-lo fora da DLL:
if (*ulDataInDll == 0L)
{
// Do stuff here
}
Quando marca os dados como __declspec(dllimport), o compilador gera automaticamente o código de indireção para si. Você não precisa mais se preocupar com as etapas acima. Como dito 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