首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对C++/WinRT组件中的COM-lite对象使用智能指针有什么建议吗?

对C++/WinRT组件中的COM-lite对象使用智能指针有什么建议吗?
EN

Stack Overflow用户
提问于 2020-09-02 06:00:56
回答 1查看 904关注 0票数 7

C++/WinRT提供了用于COM对象的3种智能指针-- Microsoft::WRL::ComPtrcom_ptr和基于ATL的CComPtr

在我的例子中,它是一个COM对象,这意味着它不是一个in-proc或out-proc COM对象,它是作为一个C++对象创建的。

在这种情况下,我应该在C++/WinRT组件中使用哪个智能指针?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-02 19:18:25

无论使用“真正的COM”还是"COM lite“(a.k.a )。),您可以使用IUnknown方法AddRefRelease以相同的方式跟踪生命周期。各种COM智能指针都依赖于IUnknown方法,因此您可以任意选择。

对于C++/WinRT应用程序,建议使用winrt::com_ptr。有关更多信息,请参见Microsoft上的使用C++/WinRT使用COM组件

我个人更喜欢在我的所有代码中使用Microsoft::WRL::ComPtr,因为我的项目通常支持使用C++/CX的UWP,使用C++/WinRT的UWP,通过C++/CX使用XDK的Xbox,通过C++/WinRT使用XDK的Xbox,使用GDK的Xbox以及使用Win32桌面平台的Xbox。

  • WRL ComPtr适用于使用C++/CX或C++/WinRT的Windows应用程序。
  • WRL ComPtr也适用于Win32老版本上的经典桌面应用程序。您可以使用#include <wrl/client.h>来获取这个类,如果您完全不使用Windows,您还可以定义__WRL_NO_DEFAULT_LIB____WRL_CLASSIC_COM_STRICT__预处理器定义。
  • WRL提供了Windows8.0SDK、Windows8.1SDK、Windows10SDK和Xbox。这意味着它可以一直使用到Visual 2012。
  • 这是一个比旧的ATL CComPtr更好的选择。WRL本质上是“ATL2.0”,因此已经修复了一些微妙的使用问题。看这个MSDN杂志文章
  • 关于ATL是在哪里提供的,也有一些怪癖。在Visual "Express“版本中,不包括ATL/MFC,因为它们被认为是”专业“功能。VS 2012和VS 2013版的Express SKU都有Windows8.xSDK,所以它们包含WRL,而不是ATL。FWIW,社区版没有这个问题。

请参阅Microsoft

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63699529

复制
相关文章

相似问题

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