CreateObjectFlags.Unwrap solo desencapsula en la instancia de destino

Anteriormente, si llamaba a GetOrCreateObjectForComInstance(IntPtr, CreateObjectFlags) en una instancia ComWrappers con la marca CreateObjectFlags.Unwrap, se desencapsulaba un contenedor de objetos administrados desde cualquier ComWrappers instancia. Ahora, cuando se especifica la marca, solo se desencapsulan los contenedores de la instancia ComWrappers en la que se llamó a GetOrCreateObjectFromComInstance.

La marca Unwrap era la única API que llegaba "entre" las instancias ComWrappers, por lo que su comportamiento era poco intuitivo. Además, la nueva API ComWrappers.TryGetObject(IntPtr, Object) está disponible para desencapsular un objeto COM de cualquier instancia ComWrappers.

Comportamiento anterior

Llamar a GetOrCreateObjectForComInstance(IntPtr, CreateObjectFlags) en una instancia ComWrappers con la marca CreateObjectFlags.Unwrap desencapsulaba un contenedor de objetos administrado de cualquier instancia ComWrappers.

Comportamiento nuevo

Llamar a GetOrCreateObjectForComInstance(IntPtr, CreateObjectFlags) en una instancia ComWrappers con la marca CreateObjectFlags.Unwrap solo desencapsula un contenedor de objetos administrado de la instancia ComWrappers en la que se llamaba a GetOrCreateObjectForComInstance. Si se proporciona un contenedor de una instancia ComWrappers diferente, la instancia ComWrappers crea un nuevo contenedor.

Versión introducida

.NET 8 (versión preliminar 5)

Tipo de cambio importante

Este es un cambio de comportamiento.

Motivo del cambio

El comportamiento anterior era poco intuitivo. También se interrumpía la experiencia de encapsulación en la que los desarrolladores podían definir cómo funcionaba la interoperabilidad COM para su código mediante sus propias instancias ComWrappers personalizadas.

Si desea mantener el comportamiento anterior, llame a ComWrappers.TryGetObject(IntPtr, Object) antes de llamar a GetOrCreateObjectForComInstance(IntPtr, CreateObjectFlags).

API afectadas