删除COM组件前的验证

需要删除一个为注册为com组件的dll,反注册过程神马的都已经写好了。现在需要在删除之前确定组件是否是好的。ProgId,dll名称以及ClsId都是知道的。

首先,在网上查找相关资料,有两种方式:

1)通过查找注册表,因为所有的com组件都注册在HKEY_CLASS_ROOT下面,通过查看注册该组件的键值是否存在来判断。

2)通过CoCreateInstance函数来创建这个com组件的对象,创建成功说明正常。

在此选择第二种方式。因为第一种仅仅判断了该com组件注册过而且注册信息还保留着,文件是否仍然存在、键值是否损坏没有考虑。

判断的过程很顺利,不过删除出现了问题,发现dll文件可以正常删除,可以原目录下面多了一个类似临时文件的文件。解决方法是上步判断完之后记得调用CoFreeUnusedLibraries();。

猜测可能是windows机制问题,程序首次创建某组件对象需要LoadLibrary()将dll加入进程空间,这个过程是很耗费资源的,所以当com对象引用计数为0 时,并没有立即卸载,就是没有马上调用UnLoadLibrary(),以防下面又要使用这个com组件。

转载于:https://www.cnblogs.com/aishangxue/p/3407377.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值