Direct3D11-在CreateSwapChainForCoreWindow上执行位置xxx时发生访问冲突



我学习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())

我的知识还不够,不知道为什么这样解决了这个问题,但我会研究并希望弄清楚(如果能找到这个问题的线索,我将不胜感激(。

最新更新