Spec-Zone.ru › GCC 6

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

Spec-Zone.ru

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