Inside COM 笔记二(Chapter3,Chapter4)
来源:互联网 发布:网络运营工作计划 编辑:程序博客网 时间:2024/04/29 22:04
首先介绍QueryInterface,可见它的地位。为什么要存在,因为COM组件对用户来说是一个黑盒子,不知道里面到底有什么,所以
就需要有查询的方法。
COM的Interface必须继承自IUnknown。每个Interface的vtbl中的前3个函数都是QuereyInterface,AddRef和Release。
IUnknown的获取,通过CreateInstance函数得到,而不必再使用new操作符。
QueryInterface的第一个参数是“接口标识符”,第二个参数是“存放请求接口指针的地址”。
Interface不能按照虚拟的方式继承IUnknown。
使用QueryInterface的一个简单例子,一目了然。
//Server
IIX : public IDispatch
{
public:
virtual xxx() = 0;
...
}
//Client
IIX *pIx = NULL;
IUnknown* pUnknown = zzz;
HRESULT hr;
hr = pUnknown->QueryInterface(IID_IIX, (void**)&pIx);
if (SUCCEEDED(hr))
{
pIx->xxx();
}
Chapter4 引用计数
引用计数,顾名思义。但是为什么它要存在,内存管理的一个方式。当客户从组件取得一个Interface时,此引用计数值将增1.当
客户使用完某个Interface后,组件的引用计数值将减1.当引用计数值为0时,组件即可将自己从内存中删除。当创建某个已有
Interface的另外一个引用时,用户也将会增大相应组件的引用计数值。
正确使用的规则:
1.在返回函数指针之前调用AddRef。
2.使用完Interface之后调用Release。
3.在赋值之后调用AddRef。
就需要有查询的方法。
COM的Interface必须继承自IUnknown。每个Interface的vtbl中的前3个函数都是QuereyInterface,AddRef和Release。
IUnknown的获取,通过CreateInstance函数得到,而不必再使用new操作符。
QueryInterface的第一个参数是“接口标识符”,第二个参数是“存放请求接口指针的地址”。
Interface不能按照虚拟的方式继承IUnknown。
使用QueryInterface的一个简单例子,一目了然。
//Server
IIX : public IDispatch
{
public:
virtual xxx() = 0;
...
}
//Client
IIX *pIx = NULL;
IUnknown* pUnknown = zzz;
HRESULT hr;
hr = pUnknown->QueryInterface(IID_IIX, (void**)&pIx);
if (SUCCEEDED(hr))
{
pIx->xxx();
}
Chapter4 引用计数
引用计数,顾名思义。但是为什么它要存在,内存管理的一个方式。当客户从组件取得一个Interface时,此引用计数值将增1.当
客户使用完某个Interface后,组件的引用计数值将减1.当引用计数值为0时,组件即可将自己从内存中删除。当创建某个已有
Interface的另外一个引用时,用户也将会增大相应组件的引用计数值。
正确使用的规则:
1.在返回函数指针之前调用AddRef。
2.使用完Interface之后调用Release。
3.在赋值之后调用AddRef。
- Inside COM 笔记二(Chapter3,Chapter4)
- Inside COM学习笔记(二)
- Inside Com学习笔记(一)
- Inside COM 笔记三(Chapter5, Chapter6)
- Inside COM 笔记四(Chapter7, Chapter8)
- C和指针(Chapter3 &Chapter4)
- 《算法导论》学习笔记之Chapter3函数的增长 Chapter4.1分治策略
- Inside COM 学习笔记三
- Inside COM学习笔记(四)
- Inside COM学习笔记(五)
- ASP.NET视频知识总结 chapter3 & chapter4
- Inside COM 笔记一(Chapter1 & Chapter2)
- COM Form "Inside COM" (1)
- Machine Learning with Spark 笔记(chapter3 )
- <<C++程序设计原理与实践>>粗读--chapter3 chapter4 Chapter5
- COM学习笔记(二)
- Essential COM笔记(二)
- COM学习笔记(二)
- 初学者入门:Structs中基本配置入门
- 用C开发项目总结
- 各大网站架构设计
- wxWidgets滚动窗口绘图总结
- 判断失误
- Inside COM 笔记二(Chapter3,Chapter4)
- 骨铭心的乡愁,一生再也无法抹去和释怀
- 关于两个外包项目的经验
- 适合学习技术的外文网站
- 技术人员最终的出路
- Javascript 操作select控件大全(新增、修改、删除、选中、清空、判断存在等)
- __declspec(noreturn)的用法
- 备份SQL数据库
- 校园笑话两则