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.
Acción recomendada
Si desea mantener el comportamiento anterior, llame a ComWrappers.TryGetObject(IntPtr, Object) antes de llamar a GetOrCreateObjectForComInstance(IntPtr, CreateObjectFlags).