社区
高通开发者论坛
帖子详情
关于IXYCONTAINER_QueryInterface
givenup
2010-01-05 03:21:58
使用IXYCONTAINER_QueryInterface(IXYContainer* pi, AEECLSID id, void** ppi)获得一个widget接口,此时,到底是pi的引用计数增加了,还是*ppi的引用计数增加了?
...全文
1752
9
打赏
收藏
关于IXYCONTAINER_QueryInterface
使用IXYCONTAINER_QueryInterface(IXYContainer* pi, AEECLSID id, void** ppi)获得一个widget接口,此时,到底是pi的引用计数增加了,还是*ppi的引用计数增加了?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
sxcnfly
2010-01-07
打赏
举报
回复
buiw我是没有做过,但就我知道最终会调用到一个WidgetBase_QueryInterface接口,ppi的引用计数也会增加。
givenup
2010-01-07
打赏
举报
回复
[Quote=引用 6 楼 sxcnfly 的回复:]
客户不看到也是知道的,这是约定俗成,COM机制就是如此,肯定有释放的地方你跟踪一下就知道了。
[/Quote]
正像com约定俗成的那样,IXYCONTAINER_QueryInterface(IXYContainer* pi, AEECLSID id, void** ppi)的调用,我们会想当然的以为,*ppi的引用计数会增加,但是内部的处理却是增加的pi的引用计数,不明白这样做的目的,楼上的可以讲清楚点吗?
givenup
2010-01-07
打赏
举报
回复
[Quote=引用 8 楼 sxcnfly 的回复:]
buiw我是没有做过,但就我知道最终会调用到一个WidgetBase_QueryInterface接口,ppi的引用计数也会增加。
[/Quote]
呵呵,看来我还得继续看代码,谢谢了。
givenup
2010-01-06
打赏
举报
回复
[Quote=引用 4 楼 sxcnfly 的回复:]
因为通过接口查询到的接口会被外面引用当然要加引用计数了,否则container接口被释放,这个查询到的接口不是就over了。
[/Quote]
那么对外面的客户来讲,它能够看到这次的引用计数的增加吗?再有,看高通的源代码示例,你会发现并没有对IContainer引用计数进行减1的操作,这样可以保证接口的彻底释放吗?
sxcnfly
2010-01-06
打赏
举报
回复
[Quote=引用 3 楼 givenup 的回复:]
引用 1 楼 strayedbird 的回复:
ppi
这是containerbase.c中对该函数的最终处理,可以看到它增加的是container的引用计数
else if ((id == AEEIID_WIDGET) || (id == AEEIID_HANDLER))
{
*ppo = &me->widget;
ICONTAINER_AddRef(po);//为什么要增加container 的引用计数呢?
return SUCCESS;
}
[/Quote]
因为通过接口查询到的接口会被外面引用当然要加引用计数了,否则container接口被释放,这个查询到的接口不是就over了。
givenup
2010-01-06
打赏
举报
回复
[Quote=引用 1 楼 strayedbird 的回复:]
ppi
[/Quote]
这是containerbase.c中对该函数的最终处理,可以看到它增加的是container的引用计数
else if ((id == AEEIID_WIDGET) || (id == AEEIID_HANDLER))
{
*ppo = &me->widget;
ICONTAINER_AddRef(po);//为什么要增加container 的引用计数呢?
return SUCCESS;
}
sxcnfly
2010-01-06
打赏
举报
回复
客户不看到也是知道的,这是约定俗成,COM机制就是如此,肯定有释放的地方你跟踪一下就知道了。
twoconk
2010-01-05
打赏
举报
回复
貌似 *ppi 和 pi 是一个东西
strayedbird
2010-01-05
打赏
举报
回复
ppi
Brew BUIW组件模型
4. **
Query
Interface
()**:查询对象支持的接口,返回指向请求接口的指针。 5. **IModel**:表示模型接口,负责数据的管理与更新。 6. **IContainer**:表示容器接口,用于管理多个子组件。 7. **Invalidate()**:使...
引用计数 nRefs 说明和使用
实际上,调用
IXYCONTAINER
_Insert()时,piwStaticHello的引用计数增一,随后的释放(RELEASEIF(piwStaticHello))并没有将piwStaticHello指向的对象资源释放掉,仅仅是引用计数减一,而piwStaticHello指向的对象资源...
BUIW初学——日程表SETFORM初探
ret += IPROPCONTAINER_
Query
Interface
(pMe->pSchContPropContainer, AEEIID_WIDGET, (void**)&tmpWidget); if (ret == SUCCESS) { //将该WIDGET放置于pXYContainer指向的container,达到显示的目的,...
BREW的Widget实现分析(一)
IXYContainer
* pixyRaise; // xy container that widget is raised to #if defined(OPTIMIZ3) AEERect rcDraw; #endif flg fVisible : 1; flg fDraw : 1; }; pNext,pPrev构成了...
注释符号
符号的技巧专题二:符号的技巧。包括以下章节: 注释符号 接续符和转义符 单引号和双引号 逻辑运算符使用分析 位运算符分析 ++、–操作符使用分析 优先级和类型转换分析 问题 下面哪些注释是正确的 ...
高通开发者论坛
4,653
社区成员
5,840
社区内容
发帖
与我相关
我的任务
高通开发者论坛
本论坛以AI、WoS 、XR、IoT、Auto、生成式AI等核心板块组成,为开发者提供便捷及高效的学习和交流平台。 高通开发者专区主页:https://qualcomm.csdn.net/
复制链接
扫一扫
分享
社区描述
本论坛以AI、WoS 、XR、IoT、Auto、生成式AI等核心板块组成,为开发者提供便捷及高效的学习和交流平台。 高通开发者专区主页:https://qualcomm.csdn.net/
人工智能
物联网
机器学习
技术论坛(原bbs)
北京·东城区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章