Compartilhar via


CreateObjectFlags.Unwrap apenas desembrulha na instância de destino

Anteriormente, se você chamasse GetOrCreateObjectForComInstance(IntPtr, CreateObjectFlags) em uma instância ComWrappers com o sinalizador CreateObjectFlags.Unwrap, um wrapper de objeto gerenciado era desempacotado de qualquer ComWrappers instância. Agora, quando o sinalizador é especificado, somente os wrappers da instância ComWrappers em que GetOrCreateObjectFromComInstance foi chamado são desembrulhados.

O sinalizador Unwrap foi a única API que atingiu "em várias" instâncias ComWrappers, portanto, seu comportamento não foi intuitivo. Além disso, a nova API ComWrappers.TryGetObject(IntPtr, Object) está disponível para desembrulhar um objeto COM de qualquer instância ComWrappers.

Comportamento anterior

Chamar GetOrCreateObjectForComInstance(IntPtr, CreateObjectFlags) em uma instância ComWrappers com o sinalizador CreateObjectFlags.Unwrap desembrulhou um wrapper de objeto gerenciado de qualquer instância ComWrappers.

Novo comportamento

Chamar GetOrCreateObjectForComInstance(IntPtr, CreateObjectFlags) em uma instância ComWrappers com o sinalizador CreateObjectFlags.Unwrap apenas desembrulha um wrapper de objeto gerenciado da instância ComWrappers em que GetOrCreateObjectForComInstance foi chamado. Se receber um wrapper de uma instância ComWrappers diferente, a instância ComWrappers criará um novo wrapper.

Versão introduzida

.NET 8 versão prévia 5

Tipo de alteração interruptiva

Esta é uma alteração comportamental.

Motivo da alteração

O comportamento anterior não estava intuitivo. Ele também interrompeu a experiência de encapsulamento em que os desenvolvedores podem definir como a interoperabilidade COM funciona para seu código usando suas próprias instâncias ComWrappers personalizadas.

Se você quiser manter o comportamento anterior, chame ComWrappers.TryGetObject(IntPtr, Object) antes de chamar GetOrCreateObjectForComInstance(IntPtr, CreateObjectFlags).

APIs afetadas