Importazione di dati tramite __declspec(dllimport)

Nel caso dei dati, l'uso __declspec(dllimport) di è un elemento pratico che rimuove un livello di riferimento indiretto. Quando si importano dati da una DLL, è comunque necessario passare attraverso la tabella degli indirizzi di importazione. Prima __declspec(dllimport)di , ciò significava che era necessario ricordare di eseguire un livello aggiuntivo di riferimento indiretto quando si accede ai dati esportati dalla 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

Si esportano quindi i dati in . File DEF:

// project.def
LIBRARY project
EXPORTS
   ulDataInDll   CONSTANT

e accedervi all'esterno della DLL:

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

Quando si contrassegnano i dati come __declspec(dllimport), il compilatore genera automaticamente il codice di riferimento indiretto. Non è più necessario preoccuparsi dei passaggi precedenti. Come indicato in precedenza, non usare __declspec(dllimport) la dichiarazione sui dati durante la compilazione della DLL. Le funzioni all'interno della DLL non usano la tabella degli indirizzi di importazione per accedere all'oggetto dati; pertanto, non si avrà il livello aggiuntivo di riferimento indiretto presente.

Per esportare automaticamente i dati dalla DLL, usare questa dichiarazione:

// 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

Vedi anche

Importazione in un'applicazione