进程内组件程序Dll必须引出的函数

作为进程内组件程序, 必须引出COM 所要求的四个基本函数:

 

1. 引出DllGetClassObject

 STDAPI DllGetClassObject(
  REFCLSID rclsid,
  REFIID riid,
  LPVOID * ppv
);

 

2. STDAPI DllCanUnloadNow(void);

 

 

3.STDAPI DllRegisterServer(void);和STDAPI DllUnregisterServer(void);

// 这两个函数在用regsvr32.exe 进行组件的注册和反注册很有用,在组件程序里面必须自己实现

自注册进程内组件程序必须引出的两个函数还注册表的创建操作

实现代码如下:

 

下面我来解释一下为什么必须引出这四个函数

在客户程序能用这个组件之前,我们必须对组件进行系统组成:

利用windows 系统给我们提供的regsvr32.exe  , 这个可以再系统的systerm32目录下找到

方法一:在 开始—>运行直接输入 regsvr32  My.dll 注意这种方式需要my.dll放在windows下的Syetem32目录下
方法二:在 开始—>运行直接输入 regsvr32.exe  D:/My.dll 注意当这种绝对路径方法中含有空格的时候需要regsvr32  "D:/ My.dll"就行了。

在对组件进行注册时候,系统会根据组件引出函数DllRegisterServer,把组件信息写入到注册表相应的地方。

同理,反注册时调用DllUnregisterServer,这也是为什么这两个函数必须要引出的原因。

 

 

下面来讲一下客户的调用方式:

当客户调用COM库函数里面的CoCreateInstance时候内部会首先调用COM库函数CoGetClassObject, CoGetClassObject函数内部在调用组件内引出函数DllGetClassObject来创建类厂对象,然后系统自动调用类厂对象的CreateInstance来创建组件对象。

注意:类厂的 CreateInstance必须由我们程序员来使用,见如下代码

 

 

参考书:<<COM技术内幕>>

            <<COM原理与应用>>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值