将 Directx12 资产移植到 XAML 元素:关于 WRL 的建议::ComPtr 替换?
Porting Directx12 Asset into XAML element: advice on WRL::ComPtr replacement?
我正在从 DirectX12 Win32 桌面示例 D3D12PipelineStateCache 创建一个 WPF 资产(如 D3D11Image),因此我可以将其作为XAML 元素嵌入到 WPF 应用程序中。
Microsoft Directx12 示例广泛使用ComPtr
(using Microsoft::WRL::ComPtr;
和#include <wrl.h>
)、智能指针,但构建失败,原因如下:
// Don't allow to compile sources with /clr
#ifdef _MANAGED
#error WRL cannot be compiled with /clr option enabled
#endif
重现:我开始更改 D3D12PipelineStateCache 项目中的配置属性:
- 配置类型:动态库
- CLR 支持:/CLR
- .net 目标:v4.5
目标是"通过停止代码从 win32 分离停止",并使其与 XAML 资产接口。
您是否建议使用智能指针来替换ComPtr
,或者您是否建议以不同的方式进行,例如,通过构建具有clr dll互操作的纯c ++ dll,在这种情况下,如何?
WRL 通常假定你将使用 Windows 运行时,该运行时显式设计为与 C# 和 C++ 互操作,因此排除了托管C++ (/clr
)) 方案。
您应该能够通过包含<atlbase.h>
来使用 ATL 的CComPtr
,但这需要一些代码更改才能工作。
-
请记住,旧 ATL
CComPtr
中的operator&
断言指针在执行等效的GetAddressOf
之前始终为 null。ComPtr
使用operator&
显式调用等效的ReleaseAndGetAddressOf
来释放任何现有指针以避免潜在的内存泄漏。 -
没有
Get
、GetAddressOf
或ReleaseAndGetAddressOf
的方法,因为CComPtr
使用老式的自动转换为原始指针,这是有问题的 -
没有
Reset
清除CComPtr
的方法,因此您必须将其设置为NULL
. -
没有
As
方法,因此您必须使用更冗长的QueryInterface
解决方案。
您可以通过派生一个添加缺少的方法的帮助程序版本来解决大多数这些问题,但这需要一些工作......
struct MyComPtr : public ATL::CComPtr
- 一个关于在C++中重载布尔运算符的问题
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 关于std::move的使用,是否有编译警告
- 关于简单C++函数(is_palindrome)的逻辑的问题
- 如何处理来自核心指南检查器的关于gsl::at的静态分析警告
- 关于:C++中异常对象的范围:为什么我没有得到副本?
- 关于C++中具有多重继承"this"指针的说明
- 关于 c++ 函数中指针赋值的简单问题
- 关于 std::min, std::max 中的比较运算符的混淆
- 这是关于成员访问规则的正确摘要吗
- C++ 关于指针取消引用的技术问题
- std::is_trivially_copyable_v 关于虚拟功能
- 关于指向指针数组的指针
- 关于复制构造函数的一个棘手问题
- 我已经阅读了很多关于 2d 数组的信息,但我在作业中使用它时遇到了麻烦
- 关于类的 Python 文档 - 对C++的引用不正确
- 关于 C++ 中的函数类型定义
- 关于条件块的问题与&&运算符有关
- 关于如何使用指向主窗口的指针的 QT 问题
- 将 Directx12 资产移植到 XAML 元素:关于 WRL 的建议::ComPtr 替换?