COM 技术内幕学习之七 (类厂)

一、类上下文

1、进程内服务器 (DLL)

2、进程中处理器 (只实现了一个组件中的一部分的进程中组件)

3、本地服务器 (EXE)

4、远程服务器 (要DCOM支持) 

二、为什么需要类厂

1、CoCreateInstance函数的不灵活性

不能控制组件建立的过程,如控制内存装载位置和对客户进行权限验证。

三、类厂

1、唯一功能是创建其他的组件

2、某个特定的类厂只创建同某个特定的CLSID相应的组件

3、CoGetClassObject 返回的是指向组件所属类厂的指针,不是组件本身的指针

4、什么时候使用CoGetClassObject?

用IClassFactory2创建组件;创建同一组件的多个实例,只需创建类厂一次。

5、CoCreateInstance 流程

CoCreateInstance-->CoGetClassObject-------->访问注册表,加载DLL------>DllGetClassObject----->

创建类厂IClassFactory--->创建组件对象(返回接口指针)

6、同一个DLL中包含多个组件 (CLSID区分)

7、类厂的任一实例只能创建一个相对应的组件

8、CoFreeUnusedLibraries (释放掉不再使用的COM库)

其调用DllCanUnloadNow() 来询问DLL组件是否可以被卸载,DllCanUnloadNow()将检查该组件的引用计数是否为0.IClassFactory::LockServer() 可以保证在客户使用类厂的过程中,不被卸载掉。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值