Dela via


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.

Om du vill behålla det tidigare beteendet anropar du ComWrappers.TryGetObject(IntPtr, Object) innan du anropar GetOrCreateObjectForComInstance(IntPtr, CreateObjectFlags).

Berörda API:er