Spec-Zone.ru › GCC 7

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

Spec-Zone.ru

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