本帖最后由 等疯来 于 2015-3-11 13:58 编辑
前言:
大家知道调用COM组件前需要先使用Regsvr32注册插件才能调用,在注册插件的过程中又会常常出现各种各样的错误:
这几天研究了很久终于找到了解决办法,可以实现免注册调用注册宝插件。下面给大家介绍一种可以实现免费调用任意COM组件的方法。
知识点介绍:
COM对象的传统创建方法,会依赖于注册表,所有应用程序都会依赖到同一个版本的COM。如果不同程序依赖的COM版本不同,而这个COM的版本兼容又没有做得很好的时候,就会出现DLL Hell问题。
微软在多年前就提供了一个Reg-free COM的方案,现在的VS也很好的集成了这个功能。 免注册COM的实现原理是把依赖到的COM类型与接口信息存储在本地的清单文件(.manifest)中,由它来代替注册表的角色,来指定COM文件路径、COM版本等信息。使用免注册COM不仅可以摆脱注册表的依赖,还可以精确的指定使用的COM版本、或者随安装包分发一个版本匹配的COM文件,指定只从本地目录读取,从而避免DLL Hell问题。
具体步骤: 0、之前官方五期所发布的免注册工具就是通过这个原理来实现免注册调用插件,但是对于六期的插件(ZCB_API.DLL)已经失效了,其实我们只要稍微修改一下这个文件就可以让这个免注册工具正常使用了。
1、鼠标右键使用记事本编辑这个文件,可以看到name="ZCB.dll"和progid="REGCOM.Register.1"这里有我们的插件名字和创建对象时用到的对象名。 那么问题来了:是不是把这两个地方改了就可以使用了呢? 当然不是!还要修改tlbid(TypeLib ID 类型库ID)和clsid(Class ID 类ID)的值。 那么问题又来了:怎么知道tlbid和clsid值是多少呢?
2、首先在系统中正常注册下官方的ZCB_API.DLL插件
3、打开运行输入regedit后回车打开注册表
4、使用快捷组合键CTRL+F打开搜索框,输入刚才注册的DLL名称"ZCB_API.DLL"点击查找下一个
5、查找到的第一个就是ZCB_API.DLL的tlbid,拿出纸和笔把它记录下来
6、选择菜单->编辑->查找下一个(快捷键F3)搜索下一项
7、查找到的第二个就是ZCB_API.DLL的clsid,拿出纸和笔把它记录下来
8、这样tlbid和clsid都获得后我们只要把上面的文字复制一段下来把相关位置的值替换掉
9、关闭保存好清单文件。现在我们先把系统中的DLL卸载掉
10、删除代码中的写出DLL和注册DLL的相关代码编译生成软件
11、打开免注册工具,点击"..."按钮选择我们刚才生成的软件
12、点击“执行免注册”按钮,弹出免注册成功的提示
13、再次运行软件,免注册调用注册宝插件成功
补充: 把ZCB_API.DLL放在目录下别人一看就是调用注册宝怎么办? 其实改名的方法也很简单,我想聪明的你一定想到了怎么做 什么!你想不到?那么就回帖一下我再继续告诉你 |