Delen via


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.

Als u het vorige gedrag wilt behouden, belt ComWrappers.TryGetObject(IntPtr, Object) u voordat u belt GetOrCreateObjectForComInstance(IntPtr, CreateObjectFlags).

Betrokken API's