Spec-Zone.ru › GCC 9

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API