首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Directx12资产移植到XAML元素:关于WRL::ComPtr替换的建议?

将Directx12资产移植到XAML元素:关于WRL::ComPtr替换的建议?
EN

Stack Overflow用户
提问于 2018-04-20 11:23:39
回答 1查看 285关注 0票数 1

我正在从DirectX12 Win32桌面示例:D3D12PipelineStateCache创建WPF资产(类似于D3D12PipelineStateCache),以便将其作为XAML元素嵌入到WPF应用程序中。

Microsoft Directx12示例正在广泛使用ComPtr (using Microsoft::WRL::ComPtr;#include <wrl.h>)智能指针,但由于以下原因,构建失败:

代码语言:javascript
复制
// Don't allow to compile sources with /clr
#ifdef _MANAGED
#error WRL cannot be compiled with /clr option enabled
#endif

Repro:我开始在D3D12PipelineStateCache项目中更改配置属性:

  • 配置类型:动态库
  • clr支持: /clr
  • .net目标: v4.5

其目标是“停止从win32中删除代码”,并使其与XAML资产接口。

您是否建议使用智能指针来替换ComPtr,或者建议以不同的方式进行操作,例如,通过与clr互操作构建纯c++ dll,在这种情况下,如何进行?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-20 17:49:53

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

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

  • 请记住,在较早的ATL中,operator& CComPtr断言指针在执行与GetAddressOf等价的操作之前始终为空。在ComPtr中,使用operator&显式调用等效的ReleaseAndGetAddressOf来释放任何现有指针以避免潜在的内存泄漏。
  • 没有GetGetAddressOfReleaseAndGetAddressOf方法,因为CComPtr使用旧的自动转换到原始指针(即成问题 )。
  • 没有用于清除ResetCComPtr方法,因此必须将其设置为NULL
  • 没有As方法,所以您必须使用更冗长的QueryInterface解决方案。

您可能可以通过派生一个添加缺少的方法的助手版本来解决这些问题,但是这需要一些工作。

代码语言:javascript
复制
struct MyComPtr : public ATL::CComPtr
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49940563

复制
相关文章

相似问题

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