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