Sdílet prostřednictvím


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

Viz také

Import do aplikace