免注册COM的使用方法
2012-08-20 22:36
357 查看
COM对象的传统创建方法,会依赖于注册表,所有应用程序都会依赖到同一个版本的COM。如果不同程序依赖的COM版本不同,而这个COM的版本兼容又没有做得很好的时候,就会出现DLL Hell问题。
微软在多年前就提供了一个Reg-free COM的方案,现在的VS也很好的集成了这个功能。
免注册COM的实现原理是把依赖到的COM类型与接口信息存储在本地的清单文件(.manifest)中,由它来代替注册表的角色,来指定COM文件路径、COM版本等信息。使用免注册COM不仅可以摆脱注册表的依赖,还可以精确的指定使用的COM版本、或者随安装包分发一个版本匹配的COM文件,指定只从本地目录读取,从而避免DLL Hell问题。
传统COM的创建过程:
免注册COM的创建过程:
清单文件格式如下,可以由VS生成:
在VS中使用的方式是在需要创建COM的项目中对Isolated COM选项进行设置,包括.tlb、.rgs文件的路径与文件名,可以按顺序添加多个:
这个免注册方案有一些限制:
1. Windows XP 及以后的操作系统(现在已经不是问题了)
2. 不支持out-of-process servers,只支持DLL。
微软在多年前就提供了一个Reg-free COM的方案,现在的VS也很好的集成了这个功能。
免注册COM的实现原理是把依赖到的COM类型与接口信息存储在本地的清单文件(.manifest)中,由它来代替注册表的角色,来指定COM文件路径、COM版本等信息。使用免注册COM不仅可以摆脱注册表的依赖,还可以精确的指定使用的COM版本、或者随安装包分发一个版本匹配的COM文件,指定只从本地目录读取,从而避免DLL Hell问题。
传统COM的创建过程:
免注册COM的创建过程:
清单文件格式如下,可以由VS生成:
<?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>
在VS中使用的方式是在需要创建COM的项目中对Isolated COM选项进行设置,包括.tlb、.rgs文件的路径与文件名,可以按顺序添加多个:
这个免注册方案有一些限制:
1. Windows XP 及以后的操作系统(现在已经不是问题了)
2. 不支持out-of-process servers,只支持DLL。
相关文章推荐
- 使用注册COM 组件 方法
- 教大家免费注册 @Microsoft.Com 的方法!
- 使用lockbits方法处理图像 from http://blog.sina.com.cn/s/blog_4e3e2ce4010009on.html
- IOS(苹果)怎么注册Instagram使用方法——怎么关注明INS星账号!
- ittun.com的使用方法
- CKEditor 4使用方法,来自http://docs.ckeditor.com/#!/guide/dev_ckeditor_js_load官网地址
- JNI-使用RegisterNatives注册本地方法
- BroadcastReceiver两种注册方式的使用方法
- JS注册事件 JS:attachEvent和addEventListener 使用方法
- 最新google play内购(com.android.billingclient) 教程 代码 封装 使用方法
- ATL与COM之间的关系、ATL的特点与基本使用方法
- iis支持asp.net4.0的注册命令使用方法
- Lua的系统学习(杂)_在VS中使用Lua_将C#方法注册进入Lua并执行的操作步骤
- delphi 注册 com 对象的方法
- 使用ANT编译项目报错 com.sun.image.codec.jpeg does not exist 解决方法
- ASP.NET中后台注册js脚本使用的方法对比
- 注册热键及使用方法
- Tomcat服务启动限制日志过大的方法、使用管理员启动,注册服务删除服务
- 同步EventBus真的需要在每个注册监听方法中处理使用try/catch吗
- “在应用程序级别之外使用注册为 allowDefinition=’MachineToApplication’ 的节是错误的。如果在 IIS 中没有将虚拟目录配置为应用程序,则可能导致此错误”的解决方法