Spec-Zone.ru › GCC 11

Следующая: Атрибуты функций MIPS, Предыдущая: Атрибуты функций MicroBlaze, Вверх: Объявление атрибутов функций [Содержание][Индекс]

6.33.20 Атрибуты функций 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 и информации о времени выполнения типа для класса. Это происходит, когда класс имеет конструктор 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-11.4.0/gcc/Microsoft-Windows-Function-Attributes.html

Spec-Zone.ru

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