现在的位置: 首页 > 综合 > 正文

《COM技术内幕》阅读笔记第7章

2018年10月08日 ⁄ 综合 ⁄ 共 732字 ⁄ 字号 评论关闭

类厂:
  创建组件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)解锁(维护计数)

抱歉!评论已关闭.