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.
"Минимальная поддержка" определяется следующими функциями:
- Эффективное сопоставление между управляемым объектом и собственным прокси-сервером (например, CCW).
- Эффективное сопоставление между собственным
IUnknownи управляемым прокси-сервером (например, RCW). - Интеграция с сборщиком мусора через интерфейсный контракт 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 для |
| CreateObject(IntPtr, CreateObjectFlags, Object, CreatedWrapperFlags) |
Создает управляемый объект для объекта, |
| CreateObject(IntPtr, CreateObjectFlags) |
Создает управляемый объект для объекта, указывающего |
| 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неуправляемым оболочкой, а если да, возвращает упакованный управляемый объект. |