我学习C++和Direct3D11/Direct2D(在UWP之上(是为了好玩,但我很难让我的小测试程序运行起来。当我调用CreateSwapChainForCoreWindow时,它抛出了一个访问冲突(请参阅下面的确切异常(。
我用D3D设备进行了其他通话,它们都能正常工作,所以我认为这不是问题所在。交换链描述相对直接,交换链本身将在调用中设置。所以,我认为异常是因为我向窗口传递了一个不正确的指针,但我无法解决它
例外:
UWP D2D示例v3.exe中0x00007FF8FE44F4E0(Windows.UI.dll(处引发异常:0xC0000005:执行位置0x00007FF8 FE44F4e0时发生访问冲突。
代码段(https://github.com/cwebb95/Direct2D_cppwinrt):
ComPtr<IDXGISwapChain1> swapChain = nullptr;
DX::ThrowIfFailed(dxgiFactory->CreateSwapChainForCoreWindow(m_d3dDevice.Get(),
reinterpret_cast<IUnknown*>(&CoreWindow::GetForCurrentThread()),
&swapChainDescription,
NULL,
&swapChain));
我可以通过将第二个参数更改为:来解决问题
static_cast<::IUnknown*>(winrt::get_abi(CoreWindow::GetForCurrentThread()))
来自:
reinterpret_cast<IUnknown*>(&CoreWindow::GetForCurrentThread())
我的知识还不够,不知道为什么这样解决了这个问题,但我会研究并希望弄清楚(如果能找到这个问题的线索,我将不胜感激(。