Spec-Zone.ru › GCC 8

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-8.5.0/gcc/Microsoft-Windows-Function-Attributes.html

Spec-Zone.ru

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