Импорт в приложение с помощью __declspec(dllimport)
Программа, использующая открытые символы, определенные библиотекой DLL, импортирует их. При создании файлов заголовков для приложений, использующих библиотеки DLL для сборки, используйте __declspec(dllimport)
в объявлениях открытых символов. Ключевое слово __declspec(dllimport)
действует независимо от того, выполняете ли вы экспорт с файлами DEF или с помощью ключевого слова __declspec(dllexport)
.
Чтобы сделать код более удобочитаемым, определите макрос для __declspec(dllimport)
, а затем используйте макрос для объявления каждого импортированного символа:
#define DllImport __declspec( dllimport )
DllImport int j;
DllImport void func();
Использовать __declspec(dllimport)
в объявлениях функций необязательно, но при применении этого ключевого слова компилятор создает более эффективный код. Однако необходимо использовать __declspec(dllimport)
для импорта исполняемого файла, чтобы получить доступ к открытым символам и объектам данных библиотеки DLL. Обратите внимание, что пользователям библиотеки DLL по-прежнему необходимо связываться с библиотекой импорта.
Вы можете использовать один и тот же файл заголовка для библиотеки DLL и для клиентского приложения. Для этого используйте специальный символ препроцессора, который указывает, выполняется сборка библиотеки DLL или сборка клиентского приложения. Например:
#ifdef _EXPORTING
#define CLASS_DECLSPEC __declspec(dllexport)
#else
#define CLASS_DECLSPEC __declspec(dllimport)
#endif
class CLASS_DECLSPEC CExampleA : public CObject
{ ... class definition ... };