CreateObjectFlags.Unwrap 只在目標執行個體上取消換行
先前,如果您在具有 CreateObjectFlags.Unwrap 旗標的 ComWrappers 執行個體上呼叫 GetOrCreateObjectForComInstance(IntPtr, CreateObjectFlags),則會從 任何 ComWrappers 執行個體解除包裝受控物件包裝函式。 現在指定旗標時,只會解除包裝呼叫 GetOrCreateObjectFromComInstance
的執行個體 ComWrappers 的包裝函式。
Unwrap 旗標是唯一到達「跨」ComWrappers 執行個體的 API,因此其行為不易了解。 此外,新的 ComWrappers.TryGetObject(IntPtr, Object) API 可用來從任何 ComWrappers 執行個體解除包裝 COM 物件。
先前的行為
在 ComWrappers 執行個體上呼叫 GetOrCreateObjectForComInstance(IntPtr, CreateObjectFlags),且 CreateObjectFlags.Unwrap 旗標已解除包裝任何 ComWrappers 執行個體的受控對象包裝函式。
新的行為
在具有 CreateObjectFlags.Unwrap 旗標的 ComWrappers 執行個體上呼叫 GetOrCreateObjectForComInstance(IntPtr, CreateObjectFlags),只會從呼叫 GetOrCreateObjectForComInstance
的 ComWrappers 執行個體解除包裝受控物件包裝函式。 如果從不同的 ComWrappers 執行個體指定包裝函式,則 ComWrappers
執行個體會建立新的包裝函式。
導入的版本
.NET 8 Preview 5
中斷性變更的類型
此變更為行為變更。
變更原因
先前的行為不易了解。 它也打破了封裝體驗,開發人員可以使用自己的自訂 ComWrappers 執行個體來定義 COM Interop 如何為其程式碼運作。
建議的動作
如果您要保留先前的行為,請先呼叫 ComWrappers.TryGetObject(IntPtr, Object),再呼叫 GetOrCreateObjectForComInstance(IntPtr, CreateObjectFlags)。