COM(组件对象模型)

COM :创建和使用组件标准

(DLL:COM的一种实现)

任何程序都由若干组件构成

      

组件:实现接口功能

       

组件特点:(1)动态链接 (2)隐藏(内部)实现(实现语言,实现逻辑)

      

COM最终目的:动态替换组件

    

COM库(COM Library):支持组件管理

     

外部程序/组件 只通过接口访问组件

    

外部程序/组件只能通过查询接口(QueryInterface)了解组件支持的接口

     

查询接口(QueryInterface)规则:

(1)(同一组件)总是返回同一IUnknow 指针

(2)外部可获得曾获得接口

(3)外部可再次获得已获得接口

(4)外部可返回起始接口

(5)可从任意接口获得已获得接口

              

接口引用计数规则:

(1)返回(接口指针)之前AddRef:返回接口指针的函数内部

(2)(接口指针)赋值之后AddRef

(3)使用完(接口)之后Release

    

组件使用过程 

(1)创建组件对象(CreateInstance):返回IUnknow指针

(2)通过IUnknow指针查询组件中接口(QueryInterface):根据接口ID(IID)返回接口指针

       

--------------------------------------------------------------------------------------------------------

COM的实现 : DLL

   

win32使用(只含纯虚函数的)结构体(struct)表示接口(interface)

#define interface struct

    

(通过)接口指针 调用接口函数:多态调用 实现函数(实现对象+虚表 / 静态实现函数)

      

多态:按同一种方式处理不同的对象

    

接口定义了一种内存结构,实现类继承这个结构

接口定义了实现类的虚表结构

     

接口继承接口, 类实现接口

     

所有接口 继承 IUnknow接口(查询接口+控制生命周期)

    interface IUnknow {

        virtual HRESULT __stdcall QueryInterface(const IID& iid, void** ppInterface) = 0;//查询组件接口

        virtual ULONG __stdcall AddRef() = 0;

        virtual ULONG __stdcall Release() = 0;

    }

一个组件只有一个IUnknow接口

       

通过类工厂创建组件对象,查询接口

CoCreateInstance (const CLSID& clsid, IUnknown*, DWORD, const IID& iid, void** ppInterface)

(1)CoGetClassObject (const CLSID& clsid, DWORD, COSERVERINFO*, IID_IClassFactory , void** ppInterface)

   创建类工厂对象      获取类工厂接口(IClassFactory)

(2)pIClassFactory->CreateInstance (IUnknown*, const IID&, void** ppInterface);

    创建组件对象,查询接口

       

DLL:进程内组件

EXE:进程外组件 

     

       

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值