6.33.19 Атрибуты функций Microsoft Windows
Следующие атрибуты доступны для целей Microsoft Windows и Symbian OS.
dllexport-
На целевых платформах Microsoft Windows и Symbian OS атрибут
dllexportзаставляет компилятор предоставлять глобальную ссылку на указатель в DLL, чтобы его можно было использовать с атрибутомdllimport. На целевых платформах Microsoft Windows имя указателя формируется путем объединения_imp__и имени функции или переменной.Вы можете использовать
__declspec(dllexport)в качестве синонима для__attribute__ ((dllexport))для совместимости с другими компиляторами.На системах, поддерживающих атрибут
visibility, этот атрибут также подразумевает «стандартную» видимость. Явное указание другой видимости является ошибкой.По умолчанию GCC генерирует все встроенные функции с атрибутом
dllexport. Поскольку это может привести к увеличению размера объектных файлов, вы можете использовать -fno-keep-inline-dllexport, который сообщает GCC игнорировать атрибут для встроенных функций, если не используется флаг -fkeep-inline-functions.Атрибут игнорируется для неопределённых символов.
При применении к классам C++ этот атрибут помечает определённые не встроенные члены-функции и статические члены данных как экспортируемые. Статические константы, инициализированные внутри класса, не отмечаются, если они также не определены вне класса.
Для целей Microsoft Windows существуют альтернативные методы включения символа в таблицу экспорта DLL, такие как использование файла .def с разделом
EXPORTSили, с GNU ld, использование флага линкера --export-all. dllimport-
На целевых платформах Microsoft Windows и Symbian OS атрибут
dllimportзаставляет компилятор ссылаться на функцию или переменную через глобальный указатель на указатель, который устанавливается DLL, экспортирующей символ. Атрибут подразумеваетextern. На целевых платформах Microsoft Windows имя указателя формируется путем объединения_imp__и имени функции или переменной.Вы можете использовать
__declspec(dllimport)в качестве синонима для__attribute__ ((dllimport))для совместимости с другими компиляторами.На системах, поддерживающих атрибут
visibility, этот атрибут также подразумевает «стандартную» видимость. Явное указание другой видимости является ошибкой.В настоящее время атрибут игнорируется для встроенных функций. Если атрибут применяется к определению символа, выводится сообщение об ошибке. Если символ, ранее объявленный
dllimport, впоследствии определён, атрибут игнорируется в последующих ссылках, и выводится предупреждение. Атрибут также переопределяется последующим объявлением какdllexport.При применении к классам C++ этот атрибут помечает не встроенные члены-функции и статические члены данных как импортируемые. Однако атрибут игнорируется для виртуальных методов для возможности создания таблиц виртуальных функций с помощью транков.
На целевой платформе SH Symbian OS атрибут
dllimportтакже имеет другое воздействие — он может привести к экспорту таблицы виртуальных функций и информации о типах во время выполнения для класса. Это происходит, когда у класса есть конструктор с атрибутом dllimported или не встроенная, не чисто виртуальная функция, и при любом из этих двух условий у класса также есть встроенный конструктор или деструктор, и у него есть ключевая функция, определённая в текущей единице трансляции.Для целей Microsoft Windows использование атрибута
dllimportдля функций необязательно, но обеспечивает небольшое повышение производительности за счёт устранения транка в DLL. Использование атрибутаdllimportдля импортируемых переменных можно избежать, передав переключатель --enable-auto-import линку GNU. Как и в случае с функциями, использование атрибута для переменной устраняет транк в DLL.Одним из недостатков использования этого атрибута является то, что указатель на переменную, помеченную как
dllimport, не может использоваться в качестве постоянного адреса. Однако указатель на функцию с атрибутомdllimportможет использоваться как постоянная инициализация; в этом случае ссылаются на адрес функции-заглушки в библиотеке импорта. На целевых платформах Microsoft Windows атрибут можно отключить для функций, установив флаг -mnop-fun-dllimport.
Далее: Атрибуты функций MIPS, Предыдущее: Атрибуты функций MicroBlaze, Вверх: Атрибуты функций [Оглавление][Индекс]
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-9.5.0/gcc/Microsoft-Windows-Function-Attributes.html