Spec-Zone.ru › GCC 14

6.33.18 Атрибуты функций 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 и информации о типе времени выполнения для класса. Это происходит, когда у класса есть конструктор dllimported или не встроенная, не чистая виртуальная функция, и при любом из этих двух условий у класса также есть встроенный конструктор или деструктор и ключевая функция, определённая в текущей единице трансляции.

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

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

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

Spec-Zone.ru

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