Udostępnij za pośrednictwem


Importowanie danych przy użyciu polecenia __declspec(dllimport)

W przypadku danych użycie __declspec(dllimport) jest elementem wygody, który usuwa warstwę pośrednią. Podczas importowania danych z biblioteki DLL nadal trzeba przejść przez tabelę adresów importu. Wcześniej __declspec(dllimport)oznaczało to, że podczas uzyskiwania dostępu do danych wyeksportowanych z biblioteki DLL trzeba było pamiętać o dodatkowym poziomie pośrednim:

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

Następnie należy wyeksportować dane w pliku . Plik DEF:

// project.def
LIBRARY project
EXPORTS
   ulDataInDll   CONSTANT

i uzyskaj dostęp do niego poza biblioteką DLL:

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

Po oznaczeniu danych jako __declspec(dllimport)kompilator automatycznie generuje kod pośredni. Nie musisz już martwić się o powyższe kroki. Jak wspomniano wcześniej, nie należy używać __declspec(dllimport) deklaracji na danych podczas kompilowania biblioteki DLL. Funkcje w dll nie używają tabeli adresów importu do uzyskiwania dostępu do obiektu danych; w związku z tym nie będzie miał dodatkowego poziomu pośredniego.

Aby wyeksportować dane automatycznie z biblioteki DLL, użyj następującej deklaracji:

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

Zobacz też

Importowanie do aplikacji