c++ - ComPtr 与 CComPtr,As 与 QueryInterface

标签 c++ atl wrl

我只想知道 ComPtr 之间的确切区别和 CComPtr ,以及是否 ComPtr::As()CComPtr::QueryInterface() 的类似物?
我阅读了两者的文档,但这个问题没有明确的答案......

最佳答案

what exact difference between ComPtr and CComPtr



它们只是来自不同框架的 COM 接口(interface)智能包装器。 ComPtr是 Windows 运行时 C++ 模板库 (WRL) 的一部分。 CComPtr是事件模板库 (ATL) 的一部分。它们为各自的框架服务于类似的目的 - 提供自动引用计数和 refcount-safe 类型转换。但是您不应该将它们互换使用。如果您正在编写 WRL 代码,请使用 ComPtr .如果您正在编写 ATL 代码,请使用 CComPtr .

whether ComPtr::As() is analogue of CComPtr::QueryInterface()?



是的,因为 As()只需调用QueryInterface()内部。

关于c++ - ComPtr 与 CComPtr,As 与 QueryInterface,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60560832/

相关文章:

未分配正在释放的 C++ 指针(可能是 unique_ptr 或 boost::ublas 的问题)

c++ - 为什么 stoi 函数在 Visual Studio 2010 中可用

winapi - 预注册 ATL 窗口类

c++ - 如何取消C++/WRL中的异步回调函数?

c++ - 检查单选按钮状态 winapi

android - CCDirector::sharedDirector()->end() 在 cpp 代码中关闭游戏后,覆盖 onPause onStop onDestroy finish 在 Cocos2dxActivity 中不起作用

c++ - 我们应该将 COM 中的 BSTR 类型视为值还是引用?

c++ - 如何在默认绘制结果之上的子类控件绘制方法中绘制某些内容?

c++ - 更新 visual studio 2017,现在出现编译错误 C7510 : 'Callback' : use of dependent template name must be prefixed with 'template'