Поделиться через


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

Пространство System.Runtime.InteropServices имен предоставляет три категории атрибутов, связанных с взаимодействием: те, которые применяются вами на этапе разработки, те, которые применяются инструментами и API COM-взаимодействия в процессе преобразования, и те, которые могут быть применены вами или средствами COM-взаимодействия.

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

Атрибуты Design-Time

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

Свойство Описание
AutomationProxyAttribute Указывает, следует ли маршалировать тип с использованием маршализатора Automation или использовать пользовательский прокси и заглушку.
ClassInterfaceAttribute Управляет типом интерфейса, созданного для класса.
CoClassAttribute Определяет CLSID исходного coclass, импортированного из библиотеки типов.

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

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

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

Средства взаимодействия COM могут применять этот атрибут.
ComDefaultInterfaceAttribute Указывает интерфейс по умолчанию для класса COM, реализованного в .NET.

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

Средства взаимодействия COM могут применять этот атрибут.
IDispatchImplAttribute Указывает, какую реализацию интерфейса IDispatch использует общаяязыковая среда выполнения при работе с двойными интерфейсами и диспинтерфейсами для 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 могут применять этот атрибут.

Атрибуты Conversion-Tool

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

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

См. также