CreateObjectFlags.Unwraps only unwraps on target instance
Als u eerder een exemplaar aanriep GetOrCreateObjectForComInstance(IntPtr, CreateObjectFlags) met de CreateObjectFlags.Unwrap vlag, werd een beheerde object-wrapper uit een ComWrappers willekeurig exemplaar uitgepakt.ComWrappers Wanneer de vlag is opgegeven, worden alleen wrappers van het ComWrappers exemplaar dat GetOrCreateObjectFromComInstance
is aangeroepen, uitgepakt.
De Unwrap vlag was de enige API die 'over' ComWrappers exemplaren bereikte, dus het gedrag ervan was niet intuïtief. Daarnaast is de nieuwe ComWrappers.TryGetObject(IntPtr, Object) API beschikbaar om een COM-object uit een willekeurig ComWrappers exemplaar uit te pakken.
Vorig gedrag
Het aanroepen van GetOrCreateObjectForComInstance(IntPtr, CreateObjectFlags) een ComWrappers exemplaar met de CreateObjectFlags.Unwrap vlag heeft een beheerde object-wrapper uit een ComWrappers willekeurig exemplaar uitgepakt.
Nieuw gedrag
Als u een ComWrappers exemplaar aanroept GetOrCreateObjectForComInstance(IntPtr, CreateObjectFlags) met de CreateObjectFlags.Unwrap vlag, wordt alleen een beheerde object-wrapper uitgepakt vanuit het ComWrappers exemplaar dat GetOrCreateObjectForComInstance
is aangeroepen. Als u een wrapper van een ander ComWrappers exemplaar krijgt, maakt het ComWrappers
exemplaar een nieuwe wrapper.
Versie geïntroduceerd
.NET 8 Preview 5
Type wijziging die fouten veroorzaken
Deze wijziging is een gedragswijziging.
Reden voor wijziging
Het vorige gedrag was niet intuïtief. Het heeft ook de inkapselingservaring verbroken, waar ontwikkelaars kunnen definiëren hoe COM-interoperabiliteit werkt voor hun code met behulp van hun eigen aangepaste ComWrappers exemplaren.
Aanbevolen actie
Als u het vorige gedrag wilt behouden, belt ComWrappers.TryGetObject(IntPtr, Object) u voordat u belt GetOrCreateObjectForComInstance(IntPtr, CreateObjectFlags).