﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-YXM blog</title><link>http://www.cppblog.com/yxm/</link><description /><language>zh-cn</language><lastBuildDate>Sat, 18 Apr 2026 06:46:44 GMT</lastBuildDate><pubDate>Sat, 18 Apr 2026 06:46:44 GMT</pubDate><ttl>60</ttl><item><title>完整的WTL文档</title><link>http://www.cppblog.com/yxm/archive/2006/11/22/15539.html</link><dc:creator>yxm</dc:creator><author>yxm</author><pubDate>Wed, 22 Nov 2006 07:18:00 GMT</pubDate><guid>http://www.cppblog.com/yxm/archive/2006/11/22/15539.html</guid><wfw:comment>http://www.cppblog.com/yxm/comments/15539.html</wfw:comment><comments>http://www.cppblog.com/yxm/archive/2006/11/22/15539.html#Feedback</comments><slash:comments>11</slash:comments><wfw:commentRss>http://www.cppblog.com/yxm/comments/commentRss/15539.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/yxm/services/trackbacks/15539.html</trackback:ping><description><![CDATA[
		<p>下载地址：<a href="/Files/yxm/wtldoc.rar">http://www.cppblog.com/Files/yxm/wtldoc.rar</a></p>
<img src ="http://www.cppblog.com/yxm/aggbug/15539.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/yxm/" target="_blank">yxm</a> 2006-11-22 15:18 <a href="http://www.cppblog.com/yxm/archive/2006/11/22/15539.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>LNK1123: 转换到 COFF 期间失败: 文件无效或损坏 &amp;&amp; CVT1100: 重复的资源 解决方法</title><link>http://www.cppblog.com/yxm/archive/2006/10/26/14243.html</link><dc:creator>yxm</dc:creator><author>yxm</author><pubDate>Thu, 26 Oct 2006 09:11:00 GMT</pubDate><guid>http://www.cppblog.com/yxm/archive/2006/10/26/14243.html</guid><wfw:comment>http://www.cppblog.com/yxm/comments/14243.html</wfw:comment><comments>http://www.cppblog.com/yxm/archive/2006/10/26/14243.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/yxm/comments/commentRss/14243.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/yxm/services/trackbacks/14243.html</trackback:ping><description><![CDATA[
		<p>详细内容请看微软官方说明：<a href="http://support.microsoft.com/kb/320216/zh-cn">http://support.microsoft.com/kb/320216/zh-cn</a><br /><br />这里贴上我的解决方法(vs2005环境)：<br /><br />设置工程属性-&gt;配置属性-&gt; 清单工具-&gt;输入和输出-&gt;嵌入清单，选择[否]，确定后重新生成即可。<br /><br /><br /></p>
<img src ="http://www.cppblog.com/yxm/aggbug/14243.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/yxm/" target="_blank">yxm</a> 2006-10-26 17:11 <a href="http://www.cppblog.com/yxm/archive/2006/10/26/14243.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>编写、发布安全的ActiveX控件</title><link>http://www.cppblog.com/yxm/archive/2006/10/23/14045.html</link><dc:creator>yxm</dc:creator><author>yxm</author><pubDate>Mon, 23 Oct 2006 09:28:00 GMT</pubDate><guid>http://www.cppblog.com/yxm/archive/2006/10/23/14045.html</guid><wfw:comment>http://www.cppblog.com/yxm/comments/14045.html</wfw:comment><comments>http://www.cppblog.com/yxm/archive/2006/10/23/14045.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/yxm/comments/commentRss/14045.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/yxm/services/trackbacks/14045.html</trackback:ping><description><![CDATA[
		<p>
				<strong>一、指出ActiveX控件对于脚本与数据初始化是安全的<br /></strong>
				<br />1.  将下行添加到组件的继承列表的末尾：</p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">public</span>
				<span style="COLOR: #000000"> IObjectSafetyImpl</span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">CPolyCtl, INTERFACESAFE_FOR_UNTRUSTED_CALLER  </span>
				<span style="COLOR: #000000">| </span>
				<span style="COLOR: #000000"> INTERFACESAFE_FOR_UNTRUSTED_DATA</span>
				<span style="COLOR: #000000">&gt;</span>
		</div>
		<br />2.  将下行添加到COM 映射： <br /><br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">COM_INTERFACE_ENTRY(IObjectSafety)</span></div><br /><strong>二、电子签名<br /></strong>可使用 MAKECERT 和 CERT2SPC 实用工具生成测试 Software Publisher Certificate。请注意，此测试 SPC 对软件发布无效，但可用于测试<a href="http://msdn.microsoft.com/library/CHS/vccore/html/_vccore_signing_a_cab_file.asp">代码签名</a>。<br /><br />1.  创建证书文件：<br /><br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; HEIGHT: 30px; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">makecert  </span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">sv  </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">私钥文件.pvk</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">  </span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">n </span><span style="COLOR: #000000">"CN</span><span style="COLOR: #000000">=公司的名字</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">  </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">证书文件名.cer</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">注意保留扩展名</span></div><p>2.  转换cer格式为spc格式：<br /><br /></p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">cert2spc   dream.cer   dream.spc   </span></div><p>3.  给cab文件签名</p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">signtool signwizard</span></div><p>4.  在web页上嵌套入签名的CAB文件<br /><br /></p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">BODY</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">OBJECT </span><span style="COLOR: #ff0000">ID</span><span style="COLOR: #0000ff">="PolyCtl"</span><span style="COLOR: #ff0000"> <br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />CLASSID</span><span style="COLOR: #0000ff">="CLSID:4CBBC676-507F-11D0-B98B-000000000000"</span><span style="COLOR: #ff0000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />CODEBASE</span><span style="COLOR: #0000ff">="http://example.sq-soft.com/mydir/myctl.cab<font color="#0000ff">#version=1,0,0,1</font>"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">OBJECT</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">BODY</span><span style="COLOR: #0000ff">&gt;</span></div><p>CODEBASE 也可以直接指向 OCX 或 DLL 文件：</p><p></p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000"><font color="#ff0000">CODEBASE</font><font color="#0000ff">="</font><a href="http://example.sq-soft.com/mydir/myctl.dll#version=1,0,0,1"><font color="#0000ff">http://example.sq-soft.com/mydir/myctl.dll#version=1,0,0,1</font></a><font color="#0000ff">"</font><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span></div><p><br /><strong>三、创建CAB文件(摘录自MSDN）</strong><br /><br />1.  创建INF文件<br /></p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">; Sample INF file </span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000"> POLYGON.DLL<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />[version] <br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />; version signature (same </span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000"> both NT and Win95) </span><span style="COLOR: #0000ff">do</span><span style="COLOR: #000000"> not remove<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />signature</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">$CHICAGO$</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />AdvancedINF</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">2.0</span><span style="COLOR: #000000">  <br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />[Add.Code]<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />polygon.dll</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">polygon.dll<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />atl.dll</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">atl.dll<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />; needed DLL<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />[atl.dll]<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />file</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">win32</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">x86</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">thiscab<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />FileVersion</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">00</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">7024</span><span style="COLOR: #000000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />DestDir</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">11</span><span style="COLOR: #000000"><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />RegisterServer</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">yes <br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />[polygon.dll]<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />file</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">win32</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">x86</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">thiscab<br /><img id="Codehighlighter1_346_383_Open_Image" onclick="this.style.display='none'; Codehighlighter1_346_383_Open_Text.style.display='none'; Codehighlighter1_346_383_Closed_Image.style.display='inline'; Codehighlighter1_346_383_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_346_383_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_346_383_Closed_Text.style.display='none'; Codehighlighter1_346_383_Open_Image.style.display='inline'; Codehighlighter1_346_383_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" />clsid</span><span style="COLOR: #000000">=</span><span id="Codehighlighter1_346_383_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/images/dot.gif" /></span><span id="Codehighlighter1_346_383_Open_Text"><span style="COLOR: #000000">{4CBBC676</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">507F</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">11D0</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">B98B</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">000000000000</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000"> <br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />FileVersion</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000"> <br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />RegisterServer</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">yes  <br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />; end of INF file<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span></div><br />其中“thiscab”是一个关键字，表示 CAB 包含此 DLL，也可通过指定一条绝对或相对路径，从一个 HTTP 位置下载所需的 DLL，例如：<br /><br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">file</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">win32</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">x86</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">http:</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">example.microsoft.com/mydir/NEEDED.DLL </span></div><p>关键字“file-win32-x86”将平台标识为 x86 特定的。</p><p>可通过在 Windows 资源管理器中的文件上单击鼠标右键来获取文件的版本号。从显示的列表中选择“属性”，然后在显示的对话框中选择“版本”选项卡。有时需要在文件版本中额外插入一个 0。例如，在对话框中 ATL.DLL 的版本号显示为 2.00.7024。而在 INF 文件中，这变为 2, 00, 0, 7024。</p><p>“DestDir”是将要加载文件的目录所在的位置：11 指定系统目录为 WINDOWS/SYSTEM 或 WINNT/SYSTEM32；10 指定 Windows 目录、WINDOWS 或 WINNT。如果未指定任何 DestDir（典型情况），则代码安装在固定的 OCCACHE 目录中。</p><p>“clsid”是将要安装的控件的 CLSID。<br /><br />2.  创建CAB文件<br /><br />创建了 INF 文件后，运行 CABARC 实用工具以创建 CAB 文件。应在包含源文件的目录下运行 CABARC。在命令行上，按源文件出现在 INF 中的顺序排列它们，并将 INF 文件放在最后。例如：</p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">CABARC </span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">s </span><span style="COLOR: #000000">6144</span><span style="COLOR: #000000">  n  MYCTL.CAB NEEDED1.DLL NEEDED2.DLL MYCTL.OCX MYCTL.INF</span></div><p>应在包含源文件（INF、OCX 和 DLL 文件）的目录下运行 CABARC。将在 CAB 文件中存档的文件应该按它们在 INF 文件中列出的同一顺序在命令行中列出。在上面的示例中，INF 文件应该将 NEEDED1.DLL 列在第一位，接下来是 NEEDED2.DLL，然后是 MYCTL.OCX。</p><p><b>-s</b> 选项在压缩文件中保留用于<a href="http://msdn.microsoft.com/library/CHS/vccore/html/_vccore_signing_a_cab_file.asp">代码签名</a>的空间。<b>n</b> 命令指定希望创建 CAB 文件。<br /> </p><img src ="http://www.cppblog.com/yxm/aggbug/14045.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/yxm/" target="_blank">yxm</a> 2006-10-23 17:28 <a href="http://www.cppblog.com/yxm/archive/2006/10/23/14045.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>