首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++-WinRT的com_ptr重置?

C++-WinRT的com_ptr重置?
EN

Stack Overflow用户
提问于 2018-06-10 22:54:47
回答 1查看 1K关注 0票数 0

我试图将DirectX11 11/XAML UWP模板移植到C++-WinRT版本.所有事情都是通过C++-WinRT完成的,我可以关闭CX。

目前,我一直在研究如何在交换链上使用ResizeBuffers。我一直收到一个错误,它说我没有释放所有的缓冲区引用。如果我注释掉任何与调整缓冲区大小和大小的硬代码有关的内容,该应用程序就能工作。所以..。我可能做错了什么。

我相信这与新的winrt::com_ptr有关。没有像WRL ComPtr中那样的ComPtr方法。我已经将它们设置为nullptr,就像在最初的C++/CX模板中一样,但这似乎还不够。

我不得不做的其他事情可能会对发生的事情产生影响:

  1. DeviceResources类现在是一个C++/WinRT类,我将使用nullptr_t参数在所有其他类(SampleScene3DRenderer、DirectXPage & Main)中默认创建该类。这样,我可以在DirectXPage中创建它,传递swapChainPanel引用,然后将这个DeviceResources实例传递给我创建的所有其他类。
  2. 在DirectX初始化中有一个地方,您必须传递一个**IUnknown。C++/WinRT的文档提到使用一个名为winrt::get_unknown的函数返回一个*IUnknown。我无法让它在下面的DWriteCreateFactory方法中工作,所以我尝试了这样做: DX::ThrowIfFailed( reinterpret_cast<::IUnknown**>(m_dwriteFactory.put()),DWRITE_FACTORY_TYPE_SHARED,__uuidof(IDWriteFactory3) );

我不知道还能做什么。只有交换链调整不起作用。我在电脑上做这个(不是windows )。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-11 15:08:58

使用DWriteCreateFactory和上面的put成员进行的put调用是正确的。同时,使用nullptr赋值也是重置com_ptr<T>的正确方法。

代码语言:javascript
复制
com_ptr<IUnknown> ptr = ...

assert(ptr);
ptr = nullptr;
assert(!ptr);

如果希望与C++/WinRT报告错误的方式保持一致,也可以使用winrt::check_hresult而不是ThrowIfFailed。下面是一个完全用C++/WinRT编写的简单DirectX示例:

https://github.com/kennykerr/cppwinrt/blob/master/Store/Direct2D/App.cpp

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50788733

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档