Импорт в приложение с помощью __declspec(dllimport)
Обновлен: Ноябрь 2007
О программе, которая использует открытые символы, определенные библиотекой 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 ... };