ComWrappers Класс

Определение

Важно!

Этот API несовместим с CLS.

Класс для управления оболочками типов COM IUnknown.

public ref class ComWrappers abstract
[System.CLSCompliant(false)]
[System.Runtime.Versioning.UnsupportedOSPlatform("android")]
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
[System.Runtime.Versioning.UnsupportedOSPlatform("ios")]
[System.Runtime.Versioning.UnsupportedOSPlatform("tvos")]
public abstract class ComWrappers
[System.CLSCompliant(false)]
[System.Runtime.Versioning.SupportedOSPlatform("windows")]
public abstract class ComWrappers
[<System.CLSCompliant(false)>]
[<System.Runtime.Versioning.UnsupportedOSPlatform("android")>]
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
[<System.Runtime.Versioning.UnsupportedOSPlatform("ios")>]
[<System.Runtime.Versioning.UnsupportedOSPlatform("tvos")>]
type ComWrappers = class
[<System.CLSCompliant(false)>]
[<System.Runtime.Versioning.SupportedOSPlatform("windows")>]
type ComWrappers = class
Public MustInherit Class ComWrappers
Наследование
ComWrappers
Производный
Атрибуты

Комментарии

API ComWrappers обеспечивает поддержку IUnknown API независимо от встроенной поддержки взаимодействия COM. ComWrappers API предоставляет минимальную поддержку среды выполнения, необходимую разработчикам для эффективной замены встроенной версии.

Традиционно в среде выполнения нативный прокси для управляемого объекта называется COM Callable Wrapper (CCW), а управляемый прокси для нативного объекта называется Runtime Callable Wrapper (RCW). Однако при использовании здесь эти термины не следует путать со встроенными функциями того же имени (т. е. CCW и RCW). В отличие от встроенных функций, большая часть ответственности за точное управление временем жизни, управление методами и маршаллирование аргументов и возвращаемых значений ложится на исполнителя ComWrappers.

"Минимальная поддержка" определяется следующими функциями:

  1. Эффективное сопоставление между управляемым объектом и собственным прокси-сервером (например, CCW).
  2. Эффективное сопоставление между собственным IUnknown и управляемым прокси-сервером (например, RCW).
  3. Интеграция с сборщиком мусора через интерфейсный контракт IReferenceTrackerHost.

Использование этого сценария — это расширенный сценарий.

Состояние прокси-сервера

В этом разделе приведены описания и иллюстрации собственного и управляемого прокси-состояния после их создания.

На следующих иллюстрациях сильные ссылки изображаются как сплошная линия (===) и слабая ссылка отображается как дефисированная линия (= = =). Термины "строгая ссылка" и "слабая ссылка" должны интерпретироваться как "продление срока службы" и "не продление срока службы", а не указывая на конкретную реализацию.

На следующем рисунке показано состояние управляемого объекта и собственного прокси-сервера после вызова ComWrappers.GetOrCreateComInterfaceForObject(Object, CreateComInterfaceFlags).

 --------------------                  ----------------------
|   Managed object   |                |     Native proxy     |
|                    |                | Ref count: 1         |
|  ----------------  |                |  ------------------  |
| | Weak reference |=| = = = = = = = >| | Strong reference | |
| |    to proxy    | |<===============|=|    to object     | |
|  ----------------  |                |  ------------------  |
 --------------------                  ----------------------

На следующем рисунке показано состояние собственного объекта и управляемого прокси-сервера после вызова ComWrappers.GetOrCreateObjectForComInstance(IntPtr, CreateObjectFlags). Концепция "идентичность" соответствует правилам IUnknown.

 ------------------               ------------------
|  Native object   |< = = = = = =|                  |
| Ref count: +1    |             | Mapping from     |
 ------------------              | native identity  |
 ------------------------        | to managed proxy |
|   Managed proxy        |< = = =|                  |
| Created by ComWrappers |        ------------------
|   implementer.        |
| Optional AddRef() on   |
|   native object.      |
 ------------------------

Обратите внимание, что с точки зрения среды выполнения существуют только слабые ссылки. Предполагается, что учет ссылок на нативный объект ведется создателем управляемого прокси-сервера (т. е. реализатором), чтобы обеспечить связанное время жизни между нативным объектом и его управляемым прокси-сервером. Существует необязательная надежная ссылка (то есть AddRef()), которая упоминается в управляемой прокси-сервере и используется для поддержки упомянутого ранее сценария (3). См. CreateObjectFlags.TrackerObject. При использовании этой необязательной строгой ссылки число ссылок будет +2.

Конструкторы

Имя Описание
ComWrappers()

Конструктор экземпляра.

Методы

Имя Описание
ComputeVtables(Object, CreateComInterfaceFlags, Int32)

Вычисляет нужную Vtable для obj, учитывая значения flags.

CreateObject(IntPtr, CreateObjectFlags, Object, CreatedWrapperFlags)

Создает управляемый объект для объекта, externalComObject на который указывает, учитывая значения flags.

CreateObject(IntPtr, CreateObjectFlags)

Создает управляемый объект для объекта, указывающего externalComObject на значения flags.

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetIUnknownImpl(IntPtr, IntPtr, IntPtr)

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

GetOrCreateComInterfaceForObject(Object, CreateComInterfaceFlags)

Создает COM-представление предоставленного объекта, который можно передать в неуправляемую среду.

GetOrCreateObjectForComInstance(IntPtr, CreateObjectFlags, Object)

Возвращает зарегистрированный в данный момент управляемый объект или создает новый управляемый объект и регистрирует его.

GetOrCreateObjectForComInstance(IntPtr, CreateObjectFlags)

Возвращает зарегистрированный в данный момент управляемый объект или создает новый управляемый объект и регистрирует его.

GetOrRegisterObjectForComInstance(IntPtr, CreateObjectFlags, Object, IntPtr)

Получите зарегистрированный в данный момент управляемый объект или использует предоставленный управляемый объект и регистрирует его.

GetOrRegisterObjectForComInstance(IntPtr, CreateObjectFlags, Object)

Возвращает зарегистрированный в данный момент управляемый объект или использует предоставленный управляемый объект и регистрирует его.

GetType()

Возвращает Type текущего экземпляра.

(Унаследовано от Object)
MemberwiseClone()

Создает неглубокую копию текущей Object.

(Унаследовано от Object)
RegisterForMarshalling(ComWrappers)

Регистрирует экземпляр, используемый ComWrappers в качестве глобального экземпляра для маршаллинга во время выполнения.

RegisterForTrackerSupport(ComWrappers)

Регистрирует экземпляр, используемый ComWrappers в качестве глобального экземпляра для поддержки ссылочного средства отслеживания.

ReleaseObjects(IEnumerable)

Освобождает коллекцию объектов за пределами обычного объекта или времени существования интерфейса COM.

ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)
TryGetComInstance(Object, IntPtr)

Определяет, является ли указанный управляемый объект созданным управляемым оболочкой, а если да, возвращает завернутый ComWrappersнеуправляемый указатель.

TryGetObject(IntPtr, Object)

Определяет, является ли указанный COM-объект созданным ComWrappersнеуправляемым оболочкой, а если да, возвращает упакованный управляемый объект.

Применяется к