﻿<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>学习日记 &#187; com</title>
	<atom:link href="https://www.softwareace.cn/?cat=96&#038;feed=rss2" rel="self" type="application/rss+xml" />
	<link>https://www.softwareace.cn</link>
	<description>时刻想着为自己的产品多做一些对他好的事情</description>
	<lastBuildDate>Fri, 20 Mar 2026 06:58:28 +0000</lastBuildDate>
	<language>zh-CN</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	
	<item>
		<title>免注册COM的使用方法</title>
		<link>https://www.softwareace.cn/?p=778</link>
		<comments>https://www.softwareace.cn/?p=778#comments</comments>
		<pubDate>Tue, 22 Apr 2014 09:53:22 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[com]]></category>

		<guid isPermaLink="false">http://www.softwareace.cn/?p=778</guid>
		<description><![CDATA[COM对象的传统创建方法，会依赖于注册表，所有应用程序都会依赖到同一个版本的COM。如果不同程序依赖的COM版 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>COM对象的传统创建方法，会依赖于注册表，所有应用程序都会依赖到同一个版本的COM。如果不同程序依赖的COM版本不同，而这个COM的版本兼容又没有做得很好的时候，就会出现DLL Hell问题。</p>
<p>微软在多年前就提供了一个Reg-free COM的方案，现在的VS也很好的集成了这个功能。</p>
<p>&nbsp;</p>
<p>免注册COM的实现原理是把依赖到的COM类型与接口信息存储在本地的清单文件（.manifest）中，由它来代替注册表的角色，来指定COM文件路径、COM版本等信息。使用免注册COM不仅可以摆脱注册表的依赖，还可以精确的指定使用的COM版本、或者随安装包分发一个版本匹配的COM文件，指定只从本地目录读取，从而避免DLL Hell问题。</p>
<p>&nbsp;</p>
<p><strong>传统COM的创建过程：</strong></p>
<p><strong> </strong></p>
<p><strong><img alt="" src="http://my.csdn.net/uploads/201208/20/1345473968_4301.gif" width="600" height="150" align="middle" /><br />
</strong></p>
<p><strong>免注册COM的创建过程：</strong></p>
<p><strong> </strong></p>
<p><strong><img alt="" src="http://my.csdn.net/uploads/201208/20/1345474026_2571.gif" width="600" height="268" align="middle" /><br />
</strong></p>
<p>&nbsp;</p>
<p><strong>清单文件格式如下，可以由VS生成：</strong></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div>
<div>
<div><b>[html]</b> <a title="view plain" href="http://blog.csdn.net/harbinzju/article/details/7888362#">view plain</a><a title="copy" href="http://blog.csdn.net/harbinzju/article/details/7888362#">copy</a></p>
<div></div>
</div>
</div>
<ol start="1">
<li>&lt;span style=&#8221;font-family: &#8216;Microsoft YaHei&#8217;; &#8220;&gt;&lt;span style=&#8221;font-size: 14px; &#8220;&gt;&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;UTF-8&#8243; standalone=&#8221;yes&#8221;?&gt;</li>
<li>&lt;assembly xmlns=&#8221;urn:schemas-microsoft-com:asm.v1&#8243; manifestVersion=&#8221;1.0&#8243;&gt;</li>
<li>  &lt;file name=&#8221;IsolatedCOM.dll&#8221; hashalg=&#8221;SHA1&#8243;&gt;</li>
<li>    &lt;comClass clsid=&#8221;{61F14DDD-8F30-4130-BD6C-1728EB9323B8}&#8221; tlbid=&#8221;{52475DC8-B071-46D2-9C84-5A6D3A4CFA2B}&#8221;&gt;&lt;/comClass&gt;</li>
<li>    &lt;typelib tlbid=&#8221;{52475DC8-B071-46D2-9C84-5A6D3A4CFA2B}&#8221; version=&#8221;1.0&#8243; helpdir=&#8221;&#8221; flags=&#8221;HASDISKIMAGE&#8221;&gt;&lt;/typelib&gt;</li>
<li>  &lt;/file&gt;</li>
<li>  &lt;trustInfo xmlns=&#8221;urn:schemas-microsoft-com:asm.v3&#8243;&gt;</li>
<li>    &lt;security&gt;</li>
<li>      &lt;requestedPrivileges&gt;</li>
<li>        &lt;requestedExecutionLevel level=&#8221;asInvoker&#8221; uiAccess=&#8221;false&#8221;&gt;&lt;/requestedExecutionLevel&gt;</li>
<li>      &lt;/requestedPrivileges&gt;</li>
<li>    &lt;/security&gt;</li>
<li>  &lt;/trustInfo&gt;</li>
<li>  &lt;comInterfaceExternalProxyStub name=&#8221;IDemoInterface&#8221; iid=&#8221;{CF9DC39E-B238-4B50-9B9F-8EEAB1A139AB}&#8221; tlbid=&#8221;{52475DC8-B071-46D2-9C84-5A6D3A4CFA2B}&#8221; proxyStubClsid32=&#8221;{00020424-0000-0000-C000-000000000046}&#8221;&gt;&lt;/comInterfaceExternalProxyStub&gt;</li>
<li>&lt;/assembly&gt;&lt;/span&gt;&lt;/span&gt;</li>
</ol>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>在VS中使用的方式是在需要创建COM的项目中对Isolated COM选项进行设置，包括.tlb、.rgs文件的路径与文件名，可以按顺序添加多个：</p>
<p><img alt="" src="http://my.csdn.net/uploads/201208/20/1345474061_4696.png" /></p>
<p>&nbsp;</p>
<p><strong>这个免注册方案有一些限制：</strong></p>
<p>1.   Windows XP 及以后的操作系统（现在已经不是问题了）</p>
<p>2.   不支持out-of-process servers，只支持DLL。</p>
]]></content:encoded>
			<wfw:commentRss>https://www.softwareace.cn/?feed=rss2&#038;p=778</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
