6 ответов:
Это специальное расширение Microsoft для языка C++, которое позволяет вам приписывать тип или функцию с информацией о классе хранения.
документация
канонические примеры
__declspec(dllimport)и__declspec(dllexport), который указывает компоновщику импортировать и экспортировать (соответственно) символ из или в DLL.// header __declspec(dllimport) void foo(); // code - this calls foo() somewhere in a DLL foo();(
__declspec(..)просто обертывает конкретные вещи Microsoft - для достижения совместимости, как правило, обернуть его с макросами)
он в основном используется для импорта символов из / экспорта символов в общую библиотеку (DLL). Компиляторы Visual C++ и GCC поддерживают
__declspec(dllimport)и__declspec(dllexport). Другие виды использования (некоторые только для Microsoft) документированы в MSDN.
еще один пример для иллюстрации _ _ declspec ключевые слова:
когда вы пишете драйвер ядра Windows, иногда вы хотите написать свой собственный пролог / эпилог кодовые последовательности используя встроенный ассемблерный код, чтобы вы могли объявить свою функцию с помощью голая.
__declspec( naked ) int func( formal_parameters ) {}или
#define Naked __declspec( naked ) Naked int func( formal_parameters ) {}пожалуйста, обратитесь к голый (C++)
по сути, это то, как Microsoft вводит свои расширения C++, чтобы они не конфликтовали с будущими расширениями стандартного C++. С помощью _ _ declspec можно приписать функцию или класс; точное значение зависит от природы __declspec. __declspec (naked), например, подавляет генерацию пролога/эпилога(для обработчиков прерываний, встраиваемого кода и т. д.), __declspec (thread) делает переменную thread-local и т. д.
полный список атрибутов _ _ declspec доступен на MSDN и зависит от версии компилятора и платформы.
Я знаю, что прошло восемь лет, но я хотел поделиться этим фрагментом кода, найденным в MRuby, который показывает, как
__declspec()может ли bee использоваться на том же уровне, что иexport keyword./** Declare a public MRuby API function. */ #if defined(MRB_BUILD_AS_DLL) #if defined(MRB_CORE) || defined(MRB_LIB) # define MRB_API __declspec(dllexport) #else # define MRB_API __declspec(dllimport) #endif #else # define MRB_API extern #endif
Comments