如何使用C+实现XAML和DirectX交换链之间的互操作+/商在最新的 微软文档提供了用C++(1):实现XAML和DirectX交换链之间互操作的代码。 Microsoft::WRL::ComPtr<ISwapChainPanelNative> m_swapChainNative; // ... IInspectable* panelInspectable = (IInspectable*) reinterpret_cast<IInspectable*>(swapChainPanel); panelInspectable->QueryInterface(__uuidof(ISwapChainPanelNative), (void **)&m_swapChainNative); Microsoft::WRL::ComPtr m_swapchainnactive; // ... IInspectable*Panel Inspectable=(IInspectable*)重新解释铸件(swapChainPanel); 面板可检查->查询接口(uu uuidof(ISwapChainPanelNative),(void**)和m_uswapchainnative);

如何使用C+实现XAML和DirectX交换链之间的互操作+/商在最新的 微软文档提供了用C++(1):实现XAML和DirectX交换链之间互操作的代码。 Microsoft::WRL::ComPtr<ISwapChainPanelNative> m_swapChainNative; // ... IInspectable* panelInspectable = (IInspectable*) reinterpret_cast<IInspectable*>(swapChainPanel); panelInspectable->QueryInterface(__uuidof(ISwapChainPanelNative), (void **)&m_swapChainNative); Microsoft::WRL::ComPtr m_swapchainnactive; // ... IInspectable*Panel Inspectable=(IInspectable*)重新解释铸件(swapChainPanel); 面板可检查->查询接口(uu uuidof(ISwapChainPanelNative),(void**)和m_uswapchainnative);,xaml,c++-winrt,directx-12,Xaml,C++ Winrt,Directx 12,然而,我无法弄清楚如何用C++/WinRT实现这一点 使用此代码时,我收到以下错误消息: “[…]”reinterpret_cast“:无法从“winrt::Windows::UI::Xaml::Controls::SwapChainPanel”转换为“IInspectable*” 我正在使用DirectX12,Visual Studio 2017 [1] 我不知道为什么WRL文档使用了重新解释cast。C++/WinRT使这一点非常简单: winrt::com_ptr<ISwapChai

然而,我无法弄清楚如何用C++/WinRT实现这一点

使用此代码时,我收到以下错误消息:

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

我正在使用DirectX12,Visual Studio 2017


[1] 我不知道为什么WRL文档使用了
重新解释cast
。C++/WinRT使这一点非常简单:

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

至于我的其余代码,我从一侧开始,为C++/WinRT应用程序创建了一个空白模板,并完全从[2]中获取了渲染管道。除了应该链接XAML和DirectX的代码之外,我没有其他构建问题。[2] :嗨,瑞安,谢谢;我仍然有问题。显然,要查看iswapchainswapchainnactive接口,它需要[3]中提到的“#include”,这是在谷歌搜索代码后发现的。然后,我得到了这个错误:“binary'=”:找不到接受类型为“winrt::com_ptr”的右操作数的运算符,它引用了“swapchainnactive=swapChainPanel.as();”;我将swapChainPanel定义为:swapChainPanel swapChainPanel。[3] :我刚刚在17763 SDK版本的cppwinrt上成功编译了这个:使用名称空间winrt的“include”pragma comment(lib,“WindowsApp.lib”);int main(){winrt::Windows::UI::Xaml::Controls::SwapChainPanel SwapChainPanel{nullptr};/…winrt::com_ptr m_swapchainactive;m_swapchainactive=SwapChainPanel.as();}``非常感谢Ryan,通过包含提到的文件,我可以看到与互操作相关的代码构建正确。添加“m_swapchainActive->SetSwapChain(swapChain);”也可以让一切正常工作。