Применение атрибутов взаимодействия
В пространстве имен 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. |