Spec-Zone.ru › GCC 15

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

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

Для целевых платформ Microsoft Windows использовать атрибут dllimport для функций необязательно, однако это дает небольшое преимущество в производительности за счет устранения thunk-функции в DLL. Использования атрибута dllimport для импортируемых переменных можно избежать, передав компоновщику GNU параметр --enable-auto-import. Как и в случае с функциями, использование атрибута для переменной устраняет thunk-функцию в DLL.

Недостаток этого атрибута заключается в том, что указатель на переменную, помеченную как dllimport, нельзя использовать в качестве константного адреса. Однако указатель на функцию с атрибутом dllimport можно использовать в качестве константного инициализатора; в этом случае используется адрес stub-функции из библиотеки импорта. Для целевых платформ Microsoft Windows атрибут можно отключить для функций, задав флаг -mnop-fun-dllimport.

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-15.3.0/gcc/Microsoft-Windows-Function-Attributes.html

Spec-Zone.ru

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