社区
Qualcomm 开发者论坛
帖子详情
关于IXYCONTAINER_QueryInterface
givenup
2010-01-05 03:21:58
使用IXYCONTAINER_QueryInterface(IXYContainer* pi, AEECLSID id, void** ppi)获得一个widget接口,此时,到底是pi的引用计数增加了,还是*ppi的引用计数增加了?
...全文
487
9
打赏
收藏
关于IXYCONTAINER_QueryInterface
使用IXYCONTAINER_QueryInterface(IXYContainer* pi, AEECLSID id, void** ppi)获得一个widget接口,此时,到底是pi的引用计数增加了,还是*ppi的引用计数增加了?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
引用计数 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
C语言进阶——注释符号12
注释可能大认为非常简单,但是注释其实在C语言中很关键,来看下面一段对话。 ---学生: 老师,我觉得注释没有必要深究,因为很简单,对程序功能也没有影响。 ---老师: 注释是C语言最重要的工具,我们先看自己有没有能力驾驭它,再讨论有没有必要深究。 请判断下面的程序示例是否正确: 1 #include<stdio.h> 2 3 int main(...
注释符号
符号的技巧专题二:符号的技巧。包括以下章节: 注释符号 接续符和转义符 单引号和双引号 逻辑运算符使用分析 位运算符分析 ++、–操作符使用分析 优先级和类型转换分析 问题 下面哪些注释是正确的 A) int/*…*/i; B) char* s = “abcdefg /higklmn”; C) //Is it a \ valid comment? D) in/*…*/t i;只
Qualcomm 开发者论坛
949
社区成员
5,228
社区内容
发帖
与我相关
我的任务
Qualcomm 开发者论坛
为开发者提供高通丰富的解决方案及全面技术下载内容。本版以AI人工智能、WoS移动笔记本、XR、IoT 物联网、Auto 汽车、生成式AI等核心板块组成,为开发者提供一个便捷及高效的学习交流平台。
复制链接
扫一扫
分享
社区描述
为开发者提供高通丰富的解决方案及全面技术下载内容。本版以AI人工智能、WoS移动笔记本、XR、IoT 物联网、Auto 汽车、生成式AI等核心板块组成,为开发者提供一个便捷及高效的学习交流平台。
人工智能
物联网
机器学习
企业社区
北京·东城区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章