6.31.17 Атрибуты функций 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++, атрибут помечает не встроенные методы-члены и статические данные-члены как импорты. Однако атрибут игнорируется для виртуальных методов, чтобы разрешить создание таблиц vtable с использованием вставок.
Для целевой системы SH Symbian OS атрибут
dllimportтакже имеет другое влияние — он может вызвать экспорт vtable и информации о времени выполнения для класса. Это происходит, когда класс имеет импортируемый из DLL конструктор или не встроенную, не чистую виртуальную функцию и, для любого из этих двух условий, класс также имеет встроенный конструктор или деструктор и имеет ключевую функцию, определённую в текущем блоке трансляции.Для целей 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-6.5.0/gcc/Microsoft-Windows-Function-Attributes.html