免注册COM的使用方法

作者: admin 分类: com 发布时间: 2014-04-22 17:53 ė2,187 浏览数 6没有评论
文章转自王牌软件
站长推荐: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生成:

 

 

  1. <span style=”font-family: ‘Microsoft YaHei’; “><span style=”font-size: 14px; “><?xml version=”1.0″ encoding=”UTF-8″ standalone=”yes”?>
  2. <assembly xmlns=”urn:schemas-microsoft-com:asm.v1″ manifestVersion=”1.0″>
  3.   <file name=”IsolatedCOM.dll” hashalg=”SHA1″>
  4.     <comClass clsid=”{61F14DDD-8F30-4130-BD6C-1728EB9323B8}” tlbid=”{52475DC8-B071-46D2-9C84-5A6D3A4CFA2B}”></comClass>
  5.     <typelib tlbid=”{52475DC8-B071-46D2-9C84-5A6D3A4CFA2B}” version=”1.0″ helpdir=”” flags=”HASDISKIMAGE”></typelib>
  6.   </file>
  7.   <trustInfo xmlns=”urn:schemas-microsoft-com:asm.v3″>
  8.     <security>
  9.       <requestedPrivileges>
  10.         <requestedExecutionLevel level=”asInvoker” uiAccess=”false”></requestedExecutionLevel>
  11.       </requestedPrivileges>
  12.     </security>
  13.   </trustInfo>
  14.   <comInterfaceExternalProxyStub name=”IDemoInterface” iid=”{CF9DC39E-B238-4B50-9B9F-8EEAB1A139AB}” tlbid=”{52475DC8-B071-46D2-9C84-5A6D3A4CFA2B}” proxyStubClsid32=”{00020424-0000-0000-C000-000000000046}”></comInterfaceExternalProxyStub>
  15. </assembly></span></span>

 

 

 

在VS中使用的方式是在需要创建COM的项目中对Isolated COM选项进行设置,包括.tlb、.rgs文件的路径与文件名,可以按顺序添加多个:

 

这个免注册方案有一些限制:

1.   Windows XP 及以后的操作系统(现在已经不是问题了)

2.   不支持out-of-process servers,只支持DLL。



只回答业务咨询点击这里给我发消息 点击这里给我发消息

学习日记,兼职软件设计,软件修改,毕业设计。

本文出自 学习日记,转载时请注明出处及相应链接。

本文永久链接: https://www.softwareace.cn/?p=778

0

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">


Ɣ回顶部

无觅相关文章插件,快速提升流量