при создании dll файла, нужно указывать
__declspec(dllexport)
или
__declspec(dllimport)
в чем разница?
Источник информации
Когда вы объявляете класс dllexport
, все его функции-члены и статические члены-данные экспортируются. Вы должны предоставить определения всех таких участников в одной программе. В противном случае генерируется ошибка компоновщика. Единственное исключение из этого правила относится к чисто виртуальным функциям, для которых вам не нужно предоставлять явные определения. Однако, поскольку деструктор для абстрактного класса всегда вызывается деструктором для базового класса, чистые виртуальные деструкторы всегда должны предоставлять определение. Обратите внимание, что эти правила одинаковы для неэкспортируемых классов.
Если вы экспортируете данные типа класса или функции, которые возвращают классы, обязательно экспортируйте класс.
Когда вы объявляете класс dllimport
, все его функции-члены и
статические члены-данные импортируются. В отличие от поведения
dllimport
и dllexport
, статические данные-члены класса, имеющие тип, не относящегося к классу,
не могут указывать определение в той же
программе, в которой определен класс dllimport
.
Возможно перевод требует правки.
Надо указывать оба. В заголовочном файле пишете
#ifdef MYDLL_EXPORTS
#define MYDLL_API __declspec(dllexport)
#else
#define MYDLL_API __declspec(dllimport)
#endif
и у объявлений функций и классов используете макрос MYDLL_API
.
void MYDLL_API api_func();
Затем DLL компилируете с -DMYDLL_EXPORTS
и у неё получается dllexport, а те кто импортируют эту DLL, они компилирутся без MYDLL_EXPORTS
и получают dllimport.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Дано связный невзвешенный граф с N вершинами N-1 ребромИ также подграф етого графа P
QtCreator, cmakeНе даёт проитерироваться по вектору объектов и передать их в функцию
Всем привет, мне нужно построить код внутри шаблона который тоже будет шаблоном Вот мой код