CreateObjectFlags.Unwraps unwraps unwraps tylko w wystąpieniu docelowym
Wcześniej, jeśli wywołano GetOrCreateObjectForComInstance(IntPtr, CreateObjectFlags) wystąpienie z CreateObjectFlags.Unwrap flagąComWrappers, otoka obiektu zarządzanego została rozpakowana z dowolnego ComWrappers wystąpienia. Teraz, gdy flaga jest określona, tylko otoki z ComWrappers wystąpienia, które GetOrCreateObjectFromComInstance
zostało wywołane, są niezapisane.
Flaga Unwrap była jedynym interfejsem API, który osiągnął "między" ComWrappers wystąpieniami, więc jego zachowanie było niezamierzone. Ponadto nowy ComWrappers.TryGetObject(IntPtr, Object) interfejs API jest dostępny do odpakowania obiektu COM z dowolnego ComWrappers wystąpienia.
Poprzednie zachowanie
Wywoływanie GetOrCreateObjectForComInstance(IntPtr, CreateObjectFlags) wystąpienia z CreateObjectFlags.Unwrap flagą ComWrappers unwrapped otoki obiektu zarządzanego z dowolnego ComWrappers wystąpienia.
Nowe zachowanie
Wywołanie GetOrCreateObjectForComInstance(IntPtr, CreateObjectFlags) wystąpienia z CreateObjectFlags.Unwrap flagą ComWrappers powoduje tylko odpakowywanie otoki obiektów zarządzanych z wywołanego ComWrappers wystąpieniaGetOrCreateObjectForComInstance
. Jeśli dana otoka z innego ComWrappers wystąpienia, ComWrappers
wystąpienie tworzy nową otokę.
Wprowadzona wersja
.NET 8 (wersja zapoznawcza 5)
Typ zmiany powodującej niezgodność
Ta zmiana jest zmianą behawioralną.
Przyczyna wprowadzenia zmiany
Poprzednie zachowanie było niezamierzone. To również złamało środowisko hermetyzacji, w którym deweloperzy mogą definiować sposób współdziałania modelu COM dla kodu przy użyciu własnych wystąpień niestandardowych ComWrappers .
Zalecana akcja
Jeśli chcesz zachować poprzednie zachowanie, przed wywołaniem metody wywołaj metodę ComWrappers.TryGetObject(IntPtr, Object) GetOrCreateObjectForComInstance(IntPtr, CreateObjectFlags).