CreateObjectFlags.Unwrap によってターゲット インスタンス上でのみ折り返しが解除される
以前は、ComWrappers インスタンス上で CreateObjectFlags.Unwrap フラグを指定して GetOrCreateObjectForComInstance(IntPtr, CreateObjectFlags) を呼び出すと、ComWrappers の "すべて" のインスタンスからのマネージド オブジェクト ラッパーのラップが解除されていました。 このたび、そのフラグが指定されていると、GetOrCreateObjectFromComInstance
が呼び出された ComWrappers インスタンスからのラッパーのみの折り返しが解除されるようになりました。
ComWrappers のインスタンスを "超えて" 到達した唯一の API が Unwrap フラグであったため、その動作は直感的ではありませんでした。 さらに、ComWrappers の任意のインスタンスから COM オブジェクトの折り返しを解除するのに、新しい ComWrappers.TryGetObject(IntPtr, Object) API を使用できます。
以前の動作
GetOrCreateObjectForComInstance(IntPtr, CreateObjectFlags) を CreateObjectFlags.Unwrap フラグを指定して ComWrappers インスタンスで呼び出すと、ComWrappers のすべてのインスタンスからのマネージド オブジェクトのラッパーの折り返しが解除されます。
新しい動作
GetOrCreateObjectForComInstance(IntPtr, CreateObjectFlags) を CreateObjectFlags.Unwrap フラグを指定して ComWrappers インスタンスで呼び出すと、GetOrCreateObjectForComInstance
が呼び出された ComWrappers のインスタンスからのマネージド オブジェクトのラッパーのみの折り返しが解除されます。 別の ComWrappers インスタンスからのラッパーが指定された場合は、ComWrappers
インスタンスで新しいラッパーが作成されます。
導入されたバージョン
.NET 8 Preview 5
破壊的変更の種類
この変更は、動作変更です。
変更理由
以前の動作は直感的ではありませんでした。 また、開発者がカスタマイズした独自の ComWrappers インスタンスを使用し、自分のコードに対して COM 相互運用がどのように機能するかを定義できる、カプセル化エクスペリエンスの妨げにもなっていました。
推奨される操作
以前の動作を維持する必要がある場合は、ComWrappers.TryGetObject(IntPtr, Object) を呼び出してから GetOrCreateObjectForComInstance(IntPtr, CreateObjectFlags) を呼び出してください。
影響を受ける API
.NET