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.
Ação recomendada
Se você quiser manter o comportamento anterior, chame ComWrappers.TryGetObject(IntPtr, Object) antes de chamar GetOrCreateObjectForComInstance(IntPtr, CreateObjectFlags).