免注册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