gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 13:12:25 26 4
gpt4 key购买 nike

关闭。这个问题是opinion-based .它目前不接受答案。












想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题.

去年关闭。




Improve this question




C++/WinRT 提供了 3 种用于 COM 对象的智能指针 - Microsoft::WRL::ComPtr , com_ptr和基于 ATL 的 CComPtr .
就我而言,它是一个 COM-lite 对象,这意味着它不是一个进程内或进程外 COM 对象,它是作为 C++ 对象创建的。
在这种情况下,我应该在 C++/WinRT 组件中使用哪个智能指针?

最佳答案

无论是使用“真正的 COM”还是“COM lite”(又名“nano-COM”),您都可以使用 IUnknown 以相同的方式跟踪生命周期。方法 添加引用 发布 .各种 COM 智能指针都依赖于 IUnknown方法,所以你可以随心所欲。
对于 C++/WinRT 应用程序,建议使用 winrt::com_ptr .如需更多信息,请参阅 Consume COM components with C++/WinRT在 Microsoft Docs 上。
我个人更喜欢使用 Microsoft::WRL::ComPtr 在我所有的代码中,因为我的项目通常支持使用 C++/CX 的 UWP、使用 C++/WinRT 的 UWP、通过 C++/CX 使用 XDK 的 Xbox、通过 C++/WinRT 使用 XDK 的 Xbox、使用 GDK 的 Xbox 和 Win32 桌面平台。

  • WRL ComPtr 适用于使用 C++/CX 或 C++/WinRT 的 Windows 运行时应用程序。
  • WRL ComPtr 也适用于旧版 Windows 上的 Win32 经典桌面应用程序。您可以使用 #include <wrl/client.h>仅获取此类,如果您根本不使用 Windows 运行时 API,您还可以同时定义 __WRL_NO_DEFAULT_LIB____WRL_CLASSIC_COM_STRICT__预处理器定义。
  • WRL 包含在 Windows 8.0 SDK、Windows 8.1 SDK、Windows 10 SDK 和 Xbox One XDK 中。这意味着它可以一直使用到 Visual Studio 2012。
  • 这是比旧的 ATL 更好的选择 CComPtr . WRL 本质上是“ATL 2.0”,因此修复了许多微妙的使用问题。看到这个 MSDN Magazine Article .
  • 还有一些关于 ATL 可用的地方的怪癖。在 Visual Studio“Express”版本中,不包括 ATL/MFC,因为它们被视为“专业”功能。 Express SKU 的 VS 2012 和 VS 2013 版本都具有 Windows 8.x SDK,因此它们包含 WRL 但不包含 ATL。 FWIW,社区版没有这个问题。

  • Microsoft Docs

    关于c++ - 在 C++/WinRT 组件中对 COM-lite 对象使用智能指针有什么建议吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63699529/

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