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ż
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla