что на самом деле означает declspec(dllimport)?
Я видел исходный код Qt следующим образом:
class Q_CORE_EXPORT QBasicAtomicInt
{
public:
...
};
, который Q_CORE_EXPORT макрос определяет, как показано ниже:
define Q_DECL_IMPORT __declspec(dllimport)
так что __declspec(dllimport) на самом деле означает?
3 ответов:
__declspec- это атрибут, специфичный для Microsoft, который позволяет указать информацию о классе хранения.
(угол Nitpicker: однако ряд других поставщиков компиляторов-например, GCC-теперь поддерживают это расширение языка для совместимости с установленной базой кода, которая была написана для компиляторов Microsoft. Некоторые даже предоставляют дополнительные атрибуты класса хранения.)два из тех атрибутов класса хранения, которые могут быть указаны являются
dllimportиdllexport. Они указывают компилятору, что функция или объект импортируется или экспортируется (соответственно) из DLL.в частности, они определяют интерфейс DLL для клиента, не требуя определения модуля (
.DEFфайл). Большинство людей считают, что гораздо проще использовать эти языковые расширения, чем создавать DEF-файлы.по понятным причинам,
__declspec(dllimport)и__declspec(dllexport)обычно в паре друг с другом. Вы используетеdllexportпометить символ экспортируется из библиотеки DLL, и вы используетеdllimportимпортировать экспортированные символы в другой файл.из-за этого, а также потому, что один и тот же файл заголовка обычно используется как при компиляции DLL, так и в клиентском коде, который использует интерфейс DLL, это общий шаблон для определения макроса, который автоматически разрешается в соответствующий спецификатор атрибута во время компиляции. Например:
#if COMPILING_DLL #define DLLEXPORT __declspec(dllexport) #else #define DLLEXPORT __declspec(dllimport) #endifа затем пометить все символы, которые должны быть экспортированы с
DLLEXPORT.предположительно, это то, что
Q_CORE_EXPORTмакрос делает, разрешая либоQ_DECL_IMPORTилиQ_DECL_EXPORT.
__declspec(dllimport)-Это спецификатор класса хранения, который сообщает компилятору, что функция, объект или тип данных определены во внешней библиотеке DLL.функция или объект или тип данных экспортируются из библиотеки DLL с соответствующим
__declspec(dllexport).
Это означает, что определение функции в динамической библиотеке. См.документация для более подробной информации и примеров.
Comments