COM笔记-组件的创建和类厂

本文详细介绍了组件的创建,特别是针对进程内组件的实现,重点讲解了DllGetClassObject、CoGetClassObject、CoCreateInstance等函数的作用。同时阐述了类厂的概念,它是如何创建其他组件的,并探讨了类厂接口IClassFactory的功能和使用,以及LockServer在管理组件生命周期中的作用。
摘要由CSDN通过智能技术生成

组件的创建和类厂

只针对进程内组件。
进程内组件一般使用DLL来实现,实现组件的DLL要导出以下四个函数:
DllGetClassObject
DllCanUnloadNow
DllRegisterServer
DllUnregisterServer

这些函数需要组件的实现者来实现并从DLL中导出。

++++++++++++++++++++++++++++++++++++++
组件的创建
函数DllGetClassObject和组件的创建紧密相关。在COM库中有三个函数可以创建对象(获得某个接口):
CoGetClassObject
CoCreateInstance
CoCreateInstanceEx
首先关注函数CoGetClassObject ,它的函数原型是:
STDAPI CoGetClassObject(
  REFCLSID rclsid,
  DWORD dwClsContext,
  COSERVERINFO * pServerInfo,
  REFIID riid,
  LPVOID * ppv
);

参数说明:
rclsid:class-id,指定了COM类的唯一标识。
dwClsContext:可执行代码的运行上下文。
pServerInfo:被用在DCOM中,一般设为NULL
riid: 通常情况下是接口IClassFactory的标识符IID_IClassFactor。如果类厂对象还支持IClassFactory2接口,也可以是接口IClassFactory2的标识符。
ppv:用来存放获得的接口指针。
对于进程内组件,CoGetClassObject 调用DLL中的导出(export)函数DllGetClassObject,并将参数rclsid,riid和ppv传递给函数DllGetClassObject。函数DllGetClassObject创建类厂对象,并将类厂对象接口通过参数ppv返回。

函数CoCreateInstance 是一个辅助函数,实际上该函数内部调用了CoGetClassObject 。该函数的参数rclsid,dwClsContext,riid,ppv含义与函数CoGetClassObject 的对应参数含义是一样。参数pUnkOuter与类厂接口的函数CreateInstance的相应参数是一致,主要被用在对象被聚合的情形。

STDAPI CoCreateInstance(
  REFCLSID rclsid,
  LPUNKNOWN pUnkOuter,
  DWORD dwClsContext,
  REFIID riid,
  LPVOID * ppv
);

函数CoCreateInstance将得到类厂,然后使用类厂得到接口指针的过程封装起来了。在参数ppv获得的接口指针就是riid对应的接口指针。函数CoCreateInstance的实现步骤一般是:
a 得到类厂接口的指针
b 创建COM对象,返回由riid标识的接口指针。

由于CoCreateInstance不能创建远程机器上的对象,所以COM库又提供了函数CoCreateInstanceEx。

HRESULT CoCreateInstanceEx(
  REFCLSID rclsid,
  IUnknown * punkOuter,
  DWORD dwClsCtx,
  COSER

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值