作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
当前 CComPtr::operator=
使用辅助函数 AtlComPtrAssign()
实现具有以下签名:
IUnknown* AtlComPtrAssign( IUnknown** pp, IUnknown* lp);
并且必须这样调用:
T* operator=( const CComPtr<T>& lp) throw()
{
if(*this!=lp) {
return static_cast<T*>(AtlComPtrAssign((IUnknown**)&p, lp));
}
return *this;
}
如果我尝试存储使用 CComPtr
会导致问题与 T
作为一个实现多个 COM 接口(interface)的类 - 转换为 IUnknown*
变得模棱两可,编译失败。
我的问题是 - 使用具有这些参数的辅助函数有什么必要?为什么不这样做:
template<classT>
T* AtlComPtrAssign( T** pp, T* lp);
并以任何合理的方式调用它 T
?这个升级到 IUnknown*
的需要是什么?然后反向向下转换为 T*
?
最佳答案
IUnknown
,总是只有一个。 AtlComPtrAssign
的整个历史是,在早期,该函数可选择驻留在 ATL.DLL 中,除非选择某些选项,人们更喜欢静态链接到 ATL。我相信对于早期版本的 ATL,您也可以将 CComPtr
与类一起使用。我记得使用过它,它非常方便——你可以同时拥有自动引用计数和原始类指针(与接口(interface)指针相对),但在某些时候,由于编译器错误,这种使用不再可用,需要一个自定义模板类而不是标准的 CComPtr 来实现相同的功能。
关于c++ - AtlComPtrAssign 需要什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9375526/
当前 CComPtr::operator=使用辅助函数 AtlComPtrAssign() 实现具有以下签名: IUnknown* AtlComPtrAssign( IUnknown** pp, IU
我是一名优秀的程序员,十分优秀!