创建COM组件的实现(或者叫作注册Com组件)

在上面这个例子中有几个问题。
1. 创建COM组件必须要知道对应的dll所在的位置,当dll位置发生移动会创建失败
2. 如果一个dll中有多个COM组件,上面只能支持其中一个组件的创建

为解决这一问题,实际中每个COM组件会有一个CLSID,这其实就是一个GUID,然后需要在注册表中注册。
注册时会在注册表中记录COM组件的GUID和dll路径。
这样客户只要知道COM组件的CLSID,然后在注册表中就可以查询到dll的路径,这样问题1解决了。
在dll导出的CreateInstance函数如果再接受一个CLSID作为参数,通过CLSID创建不同的COM组件,则问题2也解决了

注册信息放在注册表的HKEY_CLASSES_ROOT的CLSID关键字下。
CLSID是一个类似{D01ECD7A-F5FE-4E39-85D9-878B14F487CB}的字串。
这个字串可十分不好记,所以还有一个对应的ProgID。
ProgID格式如下:<Program>.<Component>.<Version>
例如:Visio.Application.1
ProgID直接列在HKEY_CLASSES_ROOT下,每个ProgID对应一个CLSID。
一般客户是知道COM组件的ProgID,通过ProgID查找到CLSID,最后通过找到的CLSID创建COM组件。
CLSIDFromProgID和ProgIDFromCLSID可实现ProgID与CLSID的相互转换
注:COM组件的CLSID是全球唯一的,而ProgID可能重名

为实现COM的注册功能,DLL还需要导出两个函数:
DllRegisterServer 和 DllUnregisterServer。
这样可以通过Regsvr32.exe来注册COM组件。Regsvr32实际上调用了dll中的DllRegisterServer函数

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值