类厂:
创建组件CoCreateInstance不够灵活 所以用类厂
1.CoCreateInstance使用 dwClsContext 有段代码清单
2.类厂 CoGetClassObject(获取类厂 CoCreateInstance用它实现) IClassFactory IClassFactory::CreateInstance
3.类厂实现DllGetClassObject 组件创建过程(客户 COM库 DLL) 组件代码 流程(①COM库中的CoCreateInstance,用类厂实现,在注册表查找组件,装载组件Dll ②调用Dll在服务器中实现的DllGetClassObject,new类厂,查IClassFactory ③IClassFactory::CreateInstace ④new组件,查IX接口 ⑤ICLassFactory::Release,pIX->Fx())
4.同一个DLL中的多个组件 (类厂 组件,类厂 组件) 类厂的复用(为每个组件创建一个简单函数,函数new出此组件返回IUnknown指针,将这些指向函数的指针构成表格,对表格访问用CLSID做索引 DllGetClassObject查表格获得创建函数指针,传递此指针给类厂)
5.Dll卸载 COM库中CoFreeUnusedLibrary(释放不需要库所占的内存) 查看DllCanUnLoadNow询问是否可被卸载(维护组件引用计数) LockServer,客户有类厂指针,类厂DLL从内从卸载,使用指针出错。为防止在某个函数作用域范围外使用IClassFactory指针时,DLL不被卸载,LockServer(TRUE)锁定服务器,使用完后LockServer(FALSE)解锁(维护计数)