Difference between CComPtr and CComQIPtr
来源:互联网 发布:中美军事力量差距知乎 编辑:程序博客网 时间:2024/04/29 01:06
可能每个人学习 ATL 的时候都要区分 CComPtr 和 CComQIPtr 的不同.
CComQIPtr 是 CComPtr 的超集, 但 CComQIPtr 不能用于 IUnknown. 为什么不能用.
#include <atlbase.h>
void main(){CComQIPtr<IUnknown> spunk;}
果然, 编译错误. 原来错误的原因只是 CComQIPtr 定义了
CComQIPtr(T* lp){..}
CComQIPtr(IUnknown* lp){..}
两个函数, 当 T = IUnknown 的时候, 函数重定义了. 还有另两个函数有这样的冲突.
查看 atlbase.h, 可以看到 CComQIPtr 还有一个特化的版本:
template<>
class CComQIPtr<IUnknown, &IID_IUnknown>
{..}
这个版本可以让这样的代码通过编译:
CComQIPtr <IUnknown, &IID_IUnknown> spunk;
但
CComQIPtr<IUnknown> sp;
为什么不能通过编译呢? CComQIPtr<IUnknown> 取了默认的模板参数, 成为 CComQIPtr<IUnknown, &__uuidof(IUnknown)>. __uuidof 这个操作符返回一个类型:
struct __s_GUID _GUID_00000000_0000_0000_c000_000000000046
很显然, 编译器不认为它和 IID_IUnknown 相同.
- Difference between CComPtr and CComQIPtr
- CComPtr CComQIPtr
- CComPtr && CComQIPtr
- CComPtr 和 CComQIPtr
- CComPtr和CComQIPtr
- CComPtr和CComQIPtr
- CComPtr 和 CComQIPtr
- CComPtr和CComQIPtr
- CComPtr和CComQIPtr
- CComPtr和CComQIPtr
- CComPtr和CComQIPtr
- CComPtr和CComQIPtr
- CComPtr和CComQIPtr
- The difference between (()) and ().
- difference between "<" and "<<"
- 【CComPtr】CComPtr和CComQIPtr的区别
- CComPtr和CComQIPtr的区别
- 智能指针CComPtr 和 CComQIPtr
- Smart formating source code using astyle in Scite
- 常用算法设计方法之递推法
- IP组播技术
- PetShop的系统架构设计
- 常用算法设计方法之递归
- Difference between CComPtr and CComQIPtr
- PetShop数据访问层之数据库访问设计
- 常用算法设计方法之回溯法
- 字符处理函数
- 有限状态机的实现
- PetShop数据访问层之消息处理
- 常用算法设计方法之贪婪法
- PetShop之ASP.NET缓存
- ubuntu更新源