gpt4 book ai didi

c# - 将 Directx12 Assets 移植到 XAML 元素中:关于 WRL::ComPtr 替换的建议?

转载 作者:行者123 更新时间:2023-11-30 05:02:19 27 4
gpt4 key购买 nike

我正致力于从 DirectX12 Win32 桌面示例创建 WPF Assets (如 D3D11Image):D3D12PipelineStateCache ,所以我可以将它作为 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 Assets 连接。

有没有智能指针可以替代ComPtr的推荐?或者您是否建议以不同的方式进行,例如,通过与 clr dll 互操作构建一个纯 c++ dll,在这种情况下,如何?

最佳答案

WRL 通常假定您将使用明确设计为与 C# 和 C++ 互操作的 Windows 运行时,因此不包括托管 C++ ( /clr )) 场景。

您应该能够使用 ATL 的 CComPtr而是包括 <atlbase.h> , 但它需要一些代码更改才能工作。

  • 请记住operator&在较旧的 ATL 中 CComPtr在执行 GetAddressOf 的等效操作之前断言指针始终为 null .在 ComPtr使用operator&显式调用等效于 ReleaseAndGetAddressOf释放任何现有指针以避免潜在的内存泄漏。

  • 没有 Get , GetAddressOf , 或 ReleaseAndGetAddressOf方法为 CComPtr使用旧式自动转换为原始指针 problematic

  • 没有 Reset清除方法CComPtr所以你必须将它设置为 NULL .

  • 没有 As方法所以你必须使用更罗嗦的QueryInterface解决方案。

您可能可以通过派生一个添加缺失方法的辅助版本来解决大部分问题,但这需要一些工作...

struct MyComPtr : public ATL::CComPtr

关于c# - 将 Directx12 Assets 移植到 XAML 元素中:关于 WRL::ComPtr 替换的建议?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49940563/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com