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

C# 将Directx12资产移植到XAML元素:关于WRL::ComPtr替换的建议?,c#,c++,wpf,clr,directx-12,C#,C++,Wpf,Clr,Directx 12,我正在从DirectX12 Win32 desktop sample:创建一个WPF资产(如),以便将其作为XAML元素嵌入到WPF应用程序中 Microsoft Directx12示例广泛使用了ComPtr(使用Microsoft::WRL::ComPtr;和#include),智能指针,但生成失败,原因是: // Don't allow to compile sources with /clr #ifdef _MANAGED #error WRL cannot be compiled wit

我正在从DirectX12 Win32 desktop sample:创建一个WPF资产(如),以便将其作为XAML元素嵌入到WPF应用程序中

Microsoft Directx12示例广泛使用了
ComPtr
使用Microsoft::WRL::ComPtr;
#include
),智能指针,但生成失败,原因是:

// 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 <代码>的建议,或者您建议通过与CR DLL互操作构建纯C++ DLL来进行不同的操作,在这种情况下,如何?

WRL通常假设您将使用Windows运行时,该操作系统是明确设计的与C和C++交互的,所以,托管C++(<代码> /CLR < /COD>)方案被排除。

您应该能够通过包含

  • 没有清除
    CComPtr
    Reset
    方法,因此必须将其设置为
    NULL

  • 没有
    As
    方法,因此您必须使用更冗长的
    QueryInterface
    解决方案

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

    struct MyComPtr : public ATL::CComPtr
    

    这个答案适用于UWP项目,想一想可能会有帮助:您看到的样本是错误的。很容易犯错误,其中有很多演示了如何在UWP应用程序中使用DirectX,它们都很新鲜。在桌面应用程序中演示它的版本要旧得多,发布得也不好。很多选择,考虑CCOPTR。@ HANSPASANT<代码> CCOMPTR <代码>将不适合,因为它没有<代码> GET()/<代码>方法来获取地址。