Spec-Zone.ru › GCC 10

Следующее: Атрибуты функций 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-10.5.0/gcc/Microsoft-Windows-Function-Attributes.html

Spec-Zone.ru

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