我试图将 C# 代码从 .NET 4.8 移植到 .NET 5,旧版本的 .NET 正在使用Microsoft.Windows.SDK.Contracts
,在 .NET 5Microsoft.Windows.SDK.Contracts
中被目标框架名字对象(TFM)替换我使用相同的代码并尝试将合成器转换为ICompositorDesktopInterop 但它抛出异常:
System.PlatformNotSupportedException:“.NET 运行时不支持编组为 IInspectable。”
这是代码:
private readonly object _dispatcherQueue;
private readonly ICompositorDesktopInterop _compositorDesktopInterop;
private ICompositionTarget compositionTarget;
public Compositor compositor;
private void InitComposition(IntPtr hwnd)
{
ICompositorDesktopInterop interop;
compositor = new Compositor();
interop = compositor.As < ICompositorDesktopInterop > ();
interop.CreateDesktopWindowTarget(hwnd, true, out compositionTarget);
compositionTarget.Root = compositor.CreateSpriteVisual();
}
这是我使用的 Com 接口定义:
[ComImport]
[Guid("29E691FA-4567-4DCA-B319-D0F207EB6807")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface ICompositorDesktopInterop
{
void CreateDesktopWindowTarget(IntPtr hwndTarget, bool isTopmost, out ICompositionTarget test);
}
[ComImport]
[Guid("A1BEA8BA-D726-4663-8129-6B5E7927FFA6")]
[InterfaceType(ComInterfaceType.InterfaceIsIInspectable)]
public interface ICompositionTarget
{
Windows.UI.Composition.Visual Root
{
get;
set;
}
}
为什么它不能与 TFM 一起使用?有什么我错过的吗?