Import dat pomocí __declspec(dllimport)
V případědatýchch __declspec(dllimport)
Při importu dat z knihovny DLL je stále nutné procházet tabulkou adres importu. Předtím __declspec(dllimport)
to znamenalo, že jste si při přístupu k datům exportovaným z knihovny DLL museli pamatovat další úroveň nepřímého přístupu:
// 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
Pak byste data vyexportovala do svého souboru . DEF soubor:
// project.def
LIBRARY project
EXPORTS
ulDataInDll CONSTANT
a přistupovat k němu mimo knihovnu DLL:
if (*ulDataInDll == 0L)
{
// Do stuff here
}
Když označíte data jako __declspec(dllimport)
, kompilátor automaticky vygeneruje nepřímý kód za vás. Už se nemusíte starat o výše uvedené kroky. Jak bylo uvedeno dříve, nepoužívejte __declspec(dllimport)
deklaraci dat při vytváření knihovny DLL. Funkce v knihovně DLL nepoužívají tabulku adres importu pro přístup k datovému objektu; proto nebudete mít další úroveň nepřímé přítomnosti.
K automatickému exportu dat z knihovny DLL použijte tuto deklaraci:
// 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