免注册COM的使用方法
文章转自王牌软件
站长推荐:NSetup一键部署软件
一键式完成美化安装包制作,自动增量升级,数据统计,数字签名。应对各种复杂场景,脚本模块化拆分,常规复杂的脚本代码,图形化设置。无需专业的研发经验,轻松完成项目部署。(www.nsetup.cn)
只回答业务咨询
站长推荐:NSetup一键部署软件
一键式完成美化安装包制作,自动增量升级,数据统计,数字签名。应对各种复杂场景,脚本模块化拆分,常规复杂的脚本代码,图形化设置。无需专业的研发经验,轻松完成项目部署。(www.nsetup.cn)
COM对象的传统创建方法,会依赖于注册表,所有应用程序都会依赖到同一个版本的COM。如果不同程序依赖的COM版本不同,而这个COM的版本兼容又没有做得很好的时候,就会出现DLL Hell问题。
微软在多年前就提供了一个Reg-free COM的方案,现在的VS也很好的集成了这个功能。
免注册COM的实现原理是把依赖到的COM类型与接口信息存储在本地的清单文件(.manifest)中,由它来代替注册表的角色,来指定COM文件路径、COM版本等信息。使用免注册COM不仅可以摆脱注册表的依赖,还可以精确的指定使用的COM版本、或者随安装包分发一个版本匹配的COM文件,指定只从本地目录读取,从而避免DLL Hell问题。
传统COM的创建过程:
免注册COM的创建过程:
清单文件格式如下,可以由VS生成:
[html] view plaincopy
- <span style=”font-family: ‘Microsoft YaHei’; “><span style=”font-size: 14px; “><?xml version=”1.0″ encoding=”UTF-8″ standalone=”yes”?>
- <assembly xmlns=”urn:schemas-microsoft-com:asm.v1″ manifestVersion=”1.0″>
- <file name=”IsolatedCOM.dll” hashalg=”SHA1″>
- <comClass clsid=”{61F14DDD-8F30-4130-BD6C-1728EB9323B8}” tlbid=”{52475DC8-B071-46D2-9C84-5A6D3A4CFA2B}”></comClass>
- <typelib tlbid=”{52475DC8-B071-46D2-9C84-5A6D3A4CFA2B}” version=”1.0″ helpdir=”” flags=”HASDISKIMAGE”></typelib>
- </file>
- <trustInfo xmlns=”urn:schemas-microsoft-com:asm.v3″>
- <security>
- <requestedPrivileges>
- <requestedExecutionLevel level=”asInvoker” uiAccess=”false”></requestedExecutionLevel>
- </requestedPrivileges>
- </security>
- </trustInfo>
- <comInterfaceExternalProxyStub name=”IDemoInterface” iid=”{CF9DC39E-B238-4B50-9B9F-8EEAB1A139AB}” tlbid=”{52475DC8-B071-46D2-9C84-5A6D3A4CFA2B}” proxyStubClsid32=”{00020424-0000-0000-C000-000000000046}”></comInterfaceExternalProxyStub>
- </assembly></span></span>
在VS中使用的方式是在需要创建COM的项目中对Isolated COM选项进行设置,包括.tlb、.rgs文件的路径与文件名,可以按顺序添加多个:
这个免注册方案有一些限制:
1. Windows XP 及以后的操作系统(现在已经不是问题了)
2. 不支持out-of-process servers,只支持DLL。
学习日记,兼职软件设计,软件修改,毕业设计。
本文出自 学习日记,转载时请注明出处及相应链接。
本文永久链接: https://www.softwareace.cn/?p=778