Import dat pomocí __declspec(dllimport)
V případě dat, která používají __declspec(DllImport), je výhodná položka ta, která odebere úroveň dereference. Při importu dat z knihovny DLL musíte stále projít tabulku importních adres. Před __declspec(DllImport) bylo nutné si pamatovat, abyste provedli vyšší úroveň dereference, když přistupujete k datům eportovaným z knihovny 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
Mohli byste pak exportovat data ve vašem souboru .DEF:
// 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 generuje dereferenční kód za vás. Již se nemusíte obávat výše uvedených kroků. Jak bylo uvedeno dříve, nepoužívejte deklarace __declspec(DllImport) na data při vytváření knihovny DLL. Funkce v rámci knihovny DLL nepoužívají tabulku importních adres pro přístup k datovému objektu; proto nebudete mít k dispozici vyšší úroveň dereference.
Chcete-li automaticky exportovat data z knihovny DLL, použijte tuto deklaraci:
__declspec(dllexport) ULONG ulDataInDLL;