Поделиться через


Импорт данных с помощью объявления __declspec(dllimport)

Использование объявления __declspec(dllimport) при работе с данными позволяет устранить уровень косвенного обращения. При импорте данных из библиотеки DLL по-прежнему сохраняется необходимость просмотра таблицы адресов импорта. Если объявление __declspec(dllimport) не используется, при обращении к данным, экспортированным из библиотеки 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

После этого необходимо выполнить экспорт данных в DEF-файл:

// project.def
LIBRARY project
EXPORTS
   ulDataInDll   CONSTANT

Затем выполняется обращение к экспортированным данным вне библиотеки DLL:

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

Если данные объявляются с помощью __declspec(dllimport), компилятором автоматически создается код косвенного обращения. В этом случае выполнять приведенные выше действия не требуется. Как показано выше, не следует использовать объявление данных __declspec(dllimport) при построении библиотеки DLL. При обращении функций библиотеки DLL к объектам данных не используется таблица адресов импорта. Благодаря этому устраняется дополнительный уровень косвенного обращения.

Для автоматического экспорта данных из библиотеки DLL используйте следующее объявление:

__declspec(dllexport) ULONG ulDataInDLL;

См. также

Основные понятия

Импорт в приложение