Применение атрибутов взаимодействия

В пространстве имен System.Runtime.InteropServices представлены три категории атрибутов взаимодействия: атрибуты, применяемые разработчиком во время разработки, API и средствами COM-взаимодействия в процессе преобразования, а также разработчиком или средой COM-взаимодействия.

Дополнительные сведения о применении атрибутов к управляемому коду см. в разделе Расширение метаданных с помощью атрибутов. Как и другие настраиваемые атрибуты, атрибуты взаимодействия можно применять к типам, методам, свойствам, параметрам, полям и другим членам.

Атрибуты времени разработки

Атрибуты времени разработки позволяют настраивать результаты процесса преобразования, который выполняется API и средствами COM-взаимодействия. В следующей таблице описываются атрибуты, которые можно применять к управляемому исходному коду. В некоторых случаях средства COM-взаимодействия также могут применять описываемые здесь атрибуты.

Атрибут Description
AutomationProxyAttribute Указывает, следует ли маршалировать тип с помощью маршализатора автоматизации или пользовательского прокси-сервера и заглушки.
ClassInterfaceAttribute Определяет тип интерфейса, создаваемого для класса.
CoClassAttribute Указывает идентификатор CLSID исходного компонентного класса, импортированного из библиотеки типов.

Этот атрибут обычно применяется средствами COM-взаимодействия.
ComImportAttribute Указывает, что определение компонентного класса или интерфейса было импортировано из библиотеки типов COM. Этот флаг используется средой выполнения, чтобы определить способ активации и маршалинга типа. Этот атрибут запрещает экспорт обратно в библиотеку типов.

Этот атрибут обычно применяется средствами COM-взаимодействия.
ComRegisterFunctionAttribute Указывает, что метод должен вызываться при регистрации сборки для использования из модели COM, что позволяет выполнять написанный пользователем код в процессе регистрации.
ComSourceInterfacesAttribute Определяет интерфейсы, являющиеся источниками событий для класса.

Этот атрибут может применяться средствами COM-взаимодействия.
ComUnregisterFunctionAttribute Указывает, что метод должен вызываться при отмене регистрации сборки для использования из модели COM, что позволяет выполнять написанный пользователем код в ходе этого процесса.
ComVisibleAttribute Если значение атрибута равно false, отображает типы, невидимые для модели COM. Этот атрибут может применяться к отдельному типу или ко всей сборке для управления видимостью COM. По умолчанию все управляемые открытые типы являются видимыми, и использовать этот атрибут не нужно.
DispIdAttribute Указывает идентификатор диспетчера COM (DISPID) для метода или поля. Этот атрибут содержит идентификатор DISPID для метода, поля или свойства, которые он описывает.

Этот атрибут может применяться средствами COM-взаимодействия.
ComDefaultInterfaceAttribute Определяет интерфейс по умолчанию для COM-класса, реализованного в .NET.

Этот атрибут может применяться средствами COM-взаимодействия.
FieldOffsetAttribute Указывает физическое расположение каждого поля в классе при использовании с атрибутом StructLayoutAttribute, если атрибуту LayoutKind присвоено значение Explicit.
GuidAttribute Указывает глобальный уникальный идентификатор (GUID) класса, интерфейса или всей библиотеки типов. Строка, передаваемая атрибуту, должна иметь формат допустимого аргумента конструктора для типа System.Guid.

Этот атрибут может применяться средствами COM-взаимодействия.
IDispatchImplAttribute Указывает, какую реализацию интерфейса IDispatch общеязыковая среда выполнения использует при предоставлении dual- и disp-интерфейсов для модели COM.
InAttribute Указывает, что данные должны маршалироваться в вызывающий объект. Может использоваться в качестве атрибута параметров.
InterfaceTypeAttribute Определяет, как управляемый интерфейс предоставляется клиентам COM (dual, производный от IUnknown или только IDispatch).

Этот атрибут может применяться средствами COM-взаимодействия.
LCIDConversionAttribute Указывает, что в сигнатуре неуправляемого метода требуется параметр кода языка (LCID).

Этот атрибут может применяться средствами COM-взаимодействия.
MarshalAsAttribute Указывает, как следует маршалировать данные в полях или параметрах между управляемым и неуправляемным кодом. Атрибут всегда необязателен, так как каждый тип данных имеет поведение маршаллинга по умолчанию.

Этот атрибут может применяться средствами COM-взаимодействия.
OptionalAttribute Указывает, что параметр является необязательным.

Этот атрибут может применяться средствами COM-взаимодействия.
OutAttribute Указывает, что данные в поле или параметре должны маршалироваться из вызываемого объекта обратно в вызывающий объект.
PreserveSigAttribute Подавляет преобразование значения HRESULT или сигнатуры retval, которое обычно выполняется во время вызовов взаимодействия. Атрибут влияет на маршалирование, а также экспорт библиотеки типов.

Этот атрибут может применяться средствами COM-взаимодействия.
ProgIdAttribute Указывает идентификатор ProgID для класса .NET. Может использоваться в качестве атрибута классов.
StructLayoutAttribute Управляет физической компоновкой полей класса.

Этот атрибут может применяться средствами COM-взаимодействия.

Атрибуты средств преобразования

В следующей таблице описываются атрибуты, которые применяются средствами COM-взаимодействия во время преобразования. Эти атрибуты не применяются во время разработки.

Атрибут Description
ComAliasNameAttribute Указывает псевдоним COM для типа параметра или поля. Может использоваться в качестве атрибута параметров, полей или возвращаемых значений.
ComConversionLossAttribute Указывает, что сведения о классе или интерфейсе были потеряны при импорте из библиотеки типов в сборку.
ComEventInterfaceAttribute Определяет исходный интерфейс и класс, реализующие методы интерфейса событий.
ImportedFromTypeLibAttribute Указывает, что сборка была первоначально импортирована из библиотеки типов COM. Этот атрибут содержит определение исходной библиотеки типов.
TypeLibFuncAttribute Содержит флаги FUNCFLAGS, которые были первоначально импортированы для этой функции из библиотеки типов COM.
TypeLibTypeAttribute Содержит флаги TYPEFLAGS, которые были первоначально импортированы для этого типа из библиотеки типов COM.
TypeLibVarAttribute Содержит флаги VARFLAGS, которые были первоначально импортированы для этой переменной из библиотеки типов COM.

См. также