Spec-Zone.ru › GCC 12

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++ атрибут помечает не встроенные методы-члены и статические члены данных как импорты. Однако атрибут игнорируется для виртуальных методов, чтобы разрешить создание таблиц виртуальных функций с использованием переходных функций.

На целевой платформе SH Symbian OS атрибут dllimport также оказывает другое влияние — он может вызвать экспорт таблицы виртуальных функций и информации о времени выполнения для класса. Это происходит, когда у класса есть импортируемый конструктор DLL или не встроенная, не чисто виртуальная функция, и, для любого из этих двух условий, у класса также есть встроенный конструктор или деструктор и есть ключевая функция, которая определена в текущей единице трансляции.

Для целевых платформ Microsoft Windows использование атрибута dllimport для функций не является обязательным, но обеспечивает небольшое преимущество в производительности, устраняя переходную функцию в DLL. Использование атрибута dllimport для импортируемых переменных можно избежать, передав переключатель --enable-auto-import в GNU linker. Как и для функций, использование атрибута для переменной устраняет переходную функцию в 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-12.2.0/gcc/Microsoft-Windows-Function-Attributes.html

Spec-Zone.ru

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