如何使用C ++ / WinRT实现XAML和DirectX交换链之间的互操作

时间:2019-03-21 17:39:58

标签: xaml c++-winrt directx-12

Microsoft文档提供了用于在XAML和使用C ++的DirectX交换链之间实现互操作的代码:

Microsoft::WRL::ComPtr<ISwapChainPanelNative>   m_swapChainNative;
// ...
IInspectable* panelInspectable = (IInspectable*) reinterpret_cast<IInspectable*>(swapChainPanel);
panelInspectable->QueryInterface(__uuidof(ISwapChainPanelNative), (void **)&m_swapChainNative);

但是,我无法弄清楚如何使用C ++ / WinRT来实现。

使用此代码时,出现以下错误消息:

“ [...]'reinterpret_cast':无法从'winrt :: Windows :: UI :: Xaml :: Controls :: SwapChainPanel'转换为'IInspectable *'”

我正在使用DirectX12,Visual Studio 2017。

[1] https://docs.microsoft.com/en-us/windows/desktop/api/windows.ui.xaml.media.dxinterop/nn-windows-ui-xaml-media-dxinterop-iswapchainpanelnative

1 个答案:

答案 0 :(得分:0)

我不确定WRL文档为何使用reinterpret_cast。 C ++ / WinRT使这一过程变得非常简单:

winrt::com_ptr<ISwapChainswapChainNative> m_swapChainNative;
// ...
swapChainNative = swapChainPanel.as<ISwapChainPanelNative>();