#xaml #c -winrt #directx-12
#xaml #c -winrt #directx-12
Вопрос:
Документация Microsoft предоставляет код для реализации взаимодействия между XAML и цепочкой подкачки DirectX с помощью C [1]:
Microsoft::WRL::ComPtr<ISwapChainPanelNative> m_swapChainNative;
// ...
IInspectable* panelInspectable = (IInspectable*) reinterpret_cast<IInspectable*>(swapChainPanel);
panelInspectable->QueryInterface(__uuidof(ISwapChainPanelNative), (void **)amp;m_swapChainNative);
Однако я не смог выяснить, как я должен реализовать это с помощью C / WinRT.
При использовании этого кода я получаю следующее сообщение об ошибке :
» […] ‘reinterpret_cast’: не удается преобразовать из ‘winrt:: Windows::UI::Xaml::Controls::SwapChainPanel’ в ‘IInspectable *’ »
Я использую DirectX12, Visual Studio 2017.
Комментарии:
1. Что касается остальной части моего кода, я начал с одной стороны с пустого шаблона для приложения C / WinRT, и я полностью взял конвейер рендеринга из [2]. У меня нет другой проблемы со сборкой, кроме кода, который должен связывать XAML и DirectX. [2]: github.com/Microsoft/Xbox-ATG-Samples/tree/master/UWPSamples /…
Ответ №1:
Я не уверен, почему используется эта документация WRL reinterpret_cast
. C / WinRT делает это довольно простым:
winrt::com_ptr<ISwapChainswapChainNative> m_swapChainNative;
// ...
swapChainNative = swapChainPanel.as<ISwapChainPanelNative>();
Комментарии:
1. Привет, Райан, спасибо; У меня все еще есть проблемы. По-видимому, чтобы увидеть исходный интерфейс Iswapchainswapchain, ему необходимо «#include <windows.ui.xaml.media.dxinterop.h>», как рассмотрено в [3], найдено после поиска в Google вашего кода. Затем я получаю эту ошибку: «двоичный файл ‘=’: оператор не найден, который принимает правый операнд типа ‘winrt::com_ptr<T>’ «, ссылаясь на «swapChainNative = swapChainPanel.as <ISwapChainPanelNative>();» ; У меня SwapChainPanel определена как: SwapChainPanel SwapChainPanel. [3]: < github.com/Microsoft/cppwinrt/issues/67 >
2. Я буквально только что успешно скомпилировал это с версией cppwinrt 17763 SDK для cppwinrt: « #включить <windows.ui.xaml.media.dxinterop.h> #включить <winrt /Windows.UI.Xaml.Controls.h> #комментарий pragma (библиотека, «WindowsApp.lib») с использованием пространства имен winrt; int main() { winrt:: Windows::UI::Xaml::Controls:: SwapChainPanel SwapChainPanel{ nullptr }; // … winrt::com_ptr<ISwapChainPanelNative> m_swapChainNative; m_swapChainNative = swapChainPanel.as <ISwapChainPanelNative>(); } «
3. Большое спасибо, Райан, включив упомянутые файлы, я вижу, что связанный с взаимодействием код собран правильно. Добавление «m_swapChainNative-> SetSwapChain(цепочка обмена);» также заставляет все работать.