中国高校课件下载中心 》 教学资源 》 大学文库

北京大学:《组件技术》课程教学资源(讲义课件)第四讲 COM实现

文档信息
资源类别:文库
文档格式:PDF
文档页数:72
文件大小:273.71KB
团购合买:点击进入团购
内容简介
一、复习:COM接口与COM对象 二、注册表 三、类厂 四、COM库 五、总结和例子
刷新页面文档预览

COM实现 潘爱民 http:/www.icst.pku.edu.cn/compcourse

COM实现 潘爱民 http://www. http://www.icst.pku.edu.cn/compcourse compcourse

内 复习:COM接口与COM对象 注册表 类厂 COM库 冷总结和例子

内容 !复习:COM接口与COM对象 !注册表 !类厂 !COM库 !总结和例子

组作接口 第一个里程 用tabe作为接口 解决了名字冲突和二进制结构兼容问题 第二个里程碑 接口转换: Dynamic_cast 第三个里程碑 管理对象生命周期:引用计数

组件接口 !第一个里程碑 – 用vtable作为接口 – 解决了名字冲突和二进制结构兼容问题 解决了名字冲突和二进制结构兼容问题 !第二个里程碑 – 接口转换:Dynamic_cast Dynamic_cast !第三个里程碑 – 管理对象生命周期:引用计数 管理对象生命周期:引用计数

cOM接口 接国标识:ID class iunknown public: virtual HRESULT stdcall QueryInterface( const IID& id, void **ppv)=0 virtual ULONG stdcall AddRef(=0 virtual ULONG stdcall Released=0

COM接口 ! 接口标识:IID ! IUnknown IUnknown接口: class IUnknown IUnknown { public: public: virtual HRESULT__ virtual HRESULT__stdcall QueryInterface stdcall QueryInterface( const IID& const IID& iid, void ** , void **ppv) = 0 ; ) = 0 ; virtual ULONG virtual ULONG __stdcall AddRef stdcall AddRef() = 0; () = 0; virtual ULONG virtual ULONG __stdcall stdcall Release() = 0; Release() = 0; };

cOM接口结构 pOtable vtable 接口指针 指针 指针函数1 指针函数2 对象实现 指针函数3

COM接口结构 接口指针 指针 指针函数 1 指针函数 2 指针函数 3 。。。。。。 对象实现 pVtable vtable

c0M接囗引用计数 用计数的含义 Outstanding reference 对象实现引用计数 Addref、 Release 客卢显式地操纵引用计数 客户有责任维护好引用计数 今引用计数规则

COM接口引用计数 !引用计数的含义 引用计数的含义 – Outstanding reference Outstanding reference !对象实现引用计数 对象实现引用计数 – AddRef、Release Release !客户显式地操纵引用计数 客户显式地操纵引用计数 – 客户有责任维护好引用计数 客户有责任维护好引用计数 !引用计数规则

cO》接口 QueryInterface HRESULT stdcall QueryInterface( const IID& id, void*ppv 个COM对象可以实现多个接口 QueryInterface是技术保证 Queryinterface实现 多继承情况:使用 static cast向上转换 三对象身份: IUnknown必须唯 客户通过 QueryInterface使用对象的接口 注意: QueryInterface内含 AddRef

COM接口QueryInterface QueryInterface HRESULT __ HRESULT __stdcall QueryInterface stdcall QueryInterface( const IID& const IID& iid, void ** , void **ppv) !一个COM对象可以实现多个接口 对象可以实现多个接口 – QueryInterface QueryInterface是技术保证 !QueryInterface QueryInterface实现 – 多继承情况:使用 多继承情况:使用static_cast static_cast向上转换 – 对象身份:IUnknown IUnknown必须唯一 !客户通过QueryInterface QueryInterface使用对象的接口 使用对象的接口 – 注意:QueryInterface QueryInterface内含AddRef

TDL 少类C的语言,但不是编程语言 跨语言的中间语言 编译器: MIDL exe产生C++头文件定义 产生C++头文件定义,相当于C+定义 MIDL,eXe产生TB类型库 许多编程语言利用COM对∏LB的支持 氵所有的标准接口都可以在SDK中找到IDL描述 支持 Import/importlib语法

IDL !类C的语言,但不是编程语言 的语言,但不是编程语言 – 跨语言的中间语言 跨语言的中间语言 !编译器:MIDL.exe MIDL.exe产生C++头文件定义 – 产生C++头文件定义,相当于 头文件定义,相当于C++定义 !MIDL.exe MIDL.exe产生TLB类型库 – 许多编程语言利用 许多编程语言利用COM对TLB的支持 !所有的标准接口都可以在 所有的标准接口都可以在SDK中找到IDL描述 – 支持import/ import/importlib importlib语法

编译IDL xxhC+头文件 用于客户/服务器 XXX LC GUID proxy/stub xIDL文件 MIDL. exe XXX_pC P/S dlldata. c xxx. tlb 用于其他编程语 言,如Java、VB

编译IDL xxx.IDL文件 MIDL.exe xxx.h C++头文件 xxx_i.c GUID xxx_p.c P/S dlldata.c xxx.tlb 用于客户/服务器 proxy/stub 用于其他编程语 言,如Java、VB

cO对象 对象标识: CLSID 封装:属性和方法,或者状态和操作 对象与接口的联系 同C++对象与成员函数之间的联系 ☆COM对象的身份 对象同一性判断准则

COM对象 !对象标识:CLSID !封装:属性和方法,或者状态和操作 封装:属性和方法,或者状态和操作 !对象与接口的联系 对象与接口的联系 – 如同C++对象与成员函数之间的联系 对象与成员函数之间的联系 !COM对象的身份 – 对象同一性判断准则 对象同一性判断准则

刷新页面下载完整文档
VIP每日下载上限内不扣除下载券和下载次数;
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
相关文档