社区
高通开发者论坛
帖子详情
关于IXYCONTAINER_QueryInterface
givenup
2010-01-05 03:21:58
使用IXYCONTAINER_QueryInterface(IXYContainer* pi, AEECLSID id, void** ppi)获得一个widget接口,此时,到底是pi的引用计数增加了,还是*ppi的引用计数增加了?
...全文
1691
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组件模型
Qualcomm BUIT Component Model
引用计数 nRefs 说明和使用
BREW接口包含了面向对象的概念,所有接口都以IBase为基类,而IBase定义了最基本的两个方法:IBase_AddRefIBase_Release 这两个方法都和一个变量紧密关联,这就是 nRefs - 引用计数。每个接口(且称之为AAA)的AAA_AddRef()的实现就是将引用计数加一: ++me->nRefs 而每个接口对象的释放函数设计都如下面模式: uint32 AA
BUIW初学——日程表SETFORM初探
根据我自己的理解,setform.c主要负责的工作就是日程表界面显示相关的内容,而逻辑实现部分则在working.c之中; 对于界面而言,其一是对于外观的修改,例如菜单的长度、文字的长度、对话框大小的设置等等;其二是更深入的部分,主要是相关按键及其他事件的处理工作。对于第一点我们了解了它就可以对界面的显示进行修改了;如果要对按键等功能设置进行更改的话则需在事件处理中进行。下面是一个创建日程表内容
BREW的Widget实现分析(一)
一,WidgetBase及其作用1,结构体的定义struct WidgetBase { const AEEVTBL(IWidget) *pvt; int nRefs; IModule * piModule; WExtent extent; IContainer * piC
注释符号
符号的技巧专题二:符号的技巧。包括以下章节: 注释符号 接续符和转义符 单引号和双引号 逻辑运算符使用分析 位运算符分析 ++、–操作符使用分析 优先级和类型转换分析 问题 下面哪些注释是正确的 A) int/*…*/i; B) char* s = “abcdefg /higklmn”; C) //Is it a \ valid comment? D) in/*…*/t i;只
高通开发者论坛
2,851
社区成员
5,756
社区内容
发帖
与我相关
我的任务
高通开发者论坛
本论坛以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写文章