您的位置:首页 > 其它

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

2008-03-11 11:49 357 查看
一、类上下文

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() 可以保证在客户使用类厂的过程中,不被卸载掉。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: