do_QueryInterface分析
来源:互联网 发布:相声 知乎 编辑:程序博客网 时间:2024/06/05 00:31
do_QueryInterface( nsISupports* aRawPtr )分析
操作语法:nsCOMPtr<nsIDirectoryServiceProvider> prov = do_QueryInterface(aElement);
它等价于:aElement->QueryInterface(iid, &prov)
具体流程如下:
1. 首先构造一个nsQueryInterface对象,它封装了一个nsISupports接口指针。它是一个函数子,被构造nsCOMPtr对象时所回调,用来查询指定接口。
nsQueryInterface do_QueryInterface( nsISupports* aRawPtr )
{
return nsQueryInterface(aRawPtr);
}
2. 接下来,构造赋值nsCOMPtr对象
nsCOMPtr( const nsQueryInterface qi )
: NSCAP_CTOR_BASE(0)
// construct from |do_QueryInterface(expr)|
{
NSCAP_LOG_ASSIGNMENT(this, 0);
assign_from_qi(qi, NS_GET_IID(T));
}
3. 接下来,开始查询接口,便于给nsCOMPtr对象赋值
template <class T>
void nsCOMPtr<T>::assign_from_qi( const nsQueryInterface qi, const nsIID& aIID )
{
T* newRawPtr;
if ( NS_FAILED( qi(aIID, NS_REINTERPRET_CAST(void**, &newRawPtr)) ) )
newRawPtr = 0;
assign_assuming_AddRef(newRawPtr);
}
4. 调用函数子,开始查询接口
nsresult nsQueryInterface::operator()( const nsIID& aIID, void** answer ) const
{
nsresult status;
if ( mRawPtr )
{
status = mRawPtr->QueryInterface(aIID, answer);
}
else
status = NS_ERROR_NULL_POINTER;
return status;
}
- do_QueryInterface分析
- do_QueryInterface
- 分析
- 分析
- 分析
- 分析
- 分析
- 分析
- 分析
- 分析
- 分析
- 大家帮忙分析分析!
- FFMpeg分析详细分析
- FFMpeg分析详细分析
- core 分析的分析
- 写给自己,分析分析
- FFMpeg分析详细分析
- 图像分析------直方图分析
- Linux shell逐行读取文件的方法
- Oracle ASM Advanced Tranning 5 —— Configure XDB for ASM Access Through FTP and HTML
- java程序员必知的8大排序
- UML用例图中包含(include)、扩展(extend)和泛化(generalization)三种关系详解
- hive 三种启动方式及用途
- do_QueryInterface分析
- Android 使用SQLiteDatabase操作SQLite数据库(二)
- Unity3D ItweenEvent 使用
- cobar快速搭建
- android项目apk打包方法
- ★★iPhone越狱后必装软件和一些心得教程,送给广大的小白们,希望你们能从小白变成“小黑”★★
- js hash 遍历
- oracle 分页~
- ClientDataSet动态创建选择字段