【问题标题】:How to implement interoperation between XAML and a DirectX swap chain with C++/WinRT如何使用 C++/WinRT 实现 XAML 和 DirectX 交换链之间的互操作
【发布时间】:2019-03-22 08:16:05
【问题描述】:

Microsoft 文档提供了在 XAML 和使用 C++ [1] 的 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

【问题讨论】:

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


【解决方案1】:

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

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

【讨论】:

  • 嗨瑞恩,谢谢;我仍然有问题。显然,要查看 ISwapChainswapChainNative 接口,它需要在 [3] 中考虑的“#include ”,在谷歌搜索您的代码后找到。然后,我收到此错误:“二进制 '=':未找到采用 'winrt::com_ptr' 类型的右侧操作数的运算符”指的是“swapChainNative = swapChainPanel.as();” ;我将 swapChainPanel 定义为:SwapChainPanel swapChainPanel。 [3]:github.com/Microsoft/cppwinrt/issues/67>
  • 我刚刚针对 17763 SDK 版本的 cppwinrt 成功编译了这个:``` #include #include #pragma comment (lib, "WindowsApp.lib") using namespace winrt; int main() { winrt::Windows::UI::Xaml::Controls::SwapChainPanel swapChainPanel{ nullptr }; // ... winrt::com_ptr m_swapChainNative; m_swapChainNative = swapChainPanel.as(); } ```
  • 非常感谢 Ryan,通过包含提到的文件,我可以看到与互操作相关的代码构建正确。添加“m_swapChainNative->SetSwapChain(swapChain);”也使一切正常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-27
  • 1970-01-01
  • 2023-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多