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