我正在从DirectX12 Win32桌面示例:D3D12PipelineStateCache创建WPF资产(类似于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
#endifRepro:我开始在D3D12PipelineStateCache项目中更改配置属性:
其目标是“停止从win32中删除代码”,并使其与XAML资产接口。
您是否建议使用智能指针来替换ComPtr,或者建议以不同的方式进行操作,例如,通过与clr互操作构建纯c++ dll,在这种情况下,如何进行?
发布于 2018-04-20 17:49:53
WRL通常假定您将使用Windows,该运行时明确设计为与C#和C++互操作,因此排除托管C++ (/clr)场景。
您应该能够通过包含CComPtr来使用ATL的<atlbase.h>,但是它需要一些代码更改才能工作。
operator& CComPtr断言指针在执行与GetAddressOf等价的操作之前始终为空。在ComPtr中,使用operator&显式调用等效的ReleaseAndGetAddressOf来释放任何现有指针以避免潜在的内存泄漏。Get、GetAddressOf或ReleaseAndGetAddressOf方法,因为CComPtr使用旧的自动转换到原始指针(即成问题 )。Reset的CComPtr方法,因此必须将其设置为NULL。As方法,所以您必须使用更冗长的QueryInterface解决方案。您可能可以通过派生一个添加缺少的方法的助手版本来解决这些问题,但是这需要一些工作。
struct MyComPtr : public ATL::CComPtrhttps://stackoverflow.com/questions/49940563
复制相似问题