CreateObjectFlags.Unwrap packar bara upp på målinstansen
Tidigare, om du anropade GetOrCreateObjectForComInstance(IntPtr, CreateObjectFlags) en ComWrappers instans med CreateObjectFlags.Unwrap flaggan, togs en hanterad objektomslutning bort från en ComWrappers instans. Nu när flaggan har angetts skrivs endast omslutningar från den ComWrappers instans som GetOrCreateObjectFromComInstance
anropades in.
Flaggan Unwrap var det enda API:et som nådde "över" ComWrappers instanser, så dess beteende var ointuitivt. Dessutom är det nya ComWrappers.TryGetObject(IntPtr, Object) API:et tillgängligt för att packa upp ett COM-objekt från valfri ComWrappers instans.
Tidigare beteende
När GetOrCreateObjectForComInstance(IntPtr, CreateObjectFlags) en ComWrappers instans anropades med CreateObjectFlags.Unwrap flaggan skrevs en hanterad objektomslutning upp från valfri ComWrappers instans.
Nytt beteende
Om du anropar GetOrCreateObjectForComInstance(IntPtr, CreateObjectFlags) en ComWrappers instans med CreateObjectFlags.Unwrap flaggan skrivs endast en hanterad objektomslutning upp från den ComWrappers instans som GetOrCreateObjectForComInstance
anropades. Om du får en omslutning från en annan ComWrappers instans skapar instansen ComWrappers
en ny omslutning.
Version introducerad
Förhandsversion 5 av .NET 8
Typ av icke-bakåtkompatibel ändring
Den här ändringen är en beteendeförändring.
Orsak till ändringen
Det tidigare beteendet var ointuitivt. Det bröt också inkapslingsupplevelsen där utvecklare kan definiera hur COM-interop fungerar för deras kod med hjälp av sina egna anpassade ComWrappers instanser.
Rekommenderad åtgärd
Om du vill behålla det tidigare beteendet anropar du ComWrappers.TryGetObject(IntPtr, Object) innan du anropar GetOrCreateObjectForComInstance(IntPtr, CreateObjectFlags).