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对象的身份 – 对象同一性判断准则 对象同一性判断准则