﻿<?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++博客-programmer-文章分类-windowsk开发-开发工具</title><link>http://www.cppblog.com/programmer/category/17916.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 01 Nov 2011 22:23:45 GMT</lastBuildDate><pubDate>Tue, 01 Nov 2011 22:23:45 GMT</pubDate><ttl>60</ttl><item><title>zhuan zai: tinyxml使用笔记与总结</title><link>http://www.cppblog.com/programmer/articles/159208.html</link><dc:creator>lxw</dc:creator><author>lxw</author><pubDate>Thu, 27 Oct 2011 03:53:00 GMT</pubDate><guid>http://www.cppblog.com/programmer/articles/159208.html</guid><wfw:comment>http://www.cppblog.com/programmer/comments/159208.html</wfw:comment><comments>http://www.cppblog.com/programmer/articles/159208.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/programmer/comments/commentRss/159208.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/programmer/services/trackbacks/159208.html</trackback:ping><description><![CDATA[<div> <p><div>Refrence：<div>http://www.cppblog.com/elva/archive/2010/01/17/47907.html<br /></div></div></p><p>在TinyXML中，根据XML的各种元素来定义了一些类：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TiXmlBase：整个TinyXML模型的基类。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TiXmlAttribute：对应于XML中的元素的属性。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TiXmlNode：对应于DOM结构中的节点。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TiXmlComment：对应于XML中的注释。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TiXmlDeclaration：对应于XML中的申明部分，即&lt;？versiong="1.0" ?&gt;。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TiXmlDocument：对应于XML的整个文档。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TiXmlElement：对应于XML的元素。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TiXmlText：对应于XML的文字部分。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TiXmlUnknown：对应于XML的未知部分。 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TiXmlHandler：定义了针对XML的一些操作。<br /><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="../../Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;?</span><span style="color: #ff00ff">xml&nbsp;version="1.0"&nbsp;standalone=no&gt;<br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&lt;!&#8211;&nbsp;Our&nbsp;to&nbsp;do&nbsp;list&nbsp;data&nbsp;&#8211;&gt;<br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&lt;ToDo&gt;<br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&lt;Item&nbsp;priority="1"&gt;&nbsp;Go&nbsp;to&nbsp;the&nbsp;&lt;bold&gt;Toy&nbsp;store!&lt;/bold&gt;&lt;/Item&gt;<br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&lt;Item&nbsp;priority="2"&gt;&nbsp;Do&nbsp;bills&lt;/Item&gt;<br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&lt;/ToDo&gt;&nbsp;</span></div> <p><br /><br />整个对象树： <br /><br />TiXmlDocument "demo.xml"<br />TiXmlDeclaration "version=&#8217;1.0&#8242;" "standalone=no"<br />TiXmlComment " Our to do list data"<br />TiXmlElement "ToDo"<br />TiXmlElement "Item" Attribtutes: priority = 1<br />TiXmlText "Go to the "<br />TiXmlElement "bold"<br />TiXmlText "Toy store!"<br />TiXmlElement "Item" Attributes: priority=2<br />TiXmlText "Do bills" <br /><br /><span style="font-family: SimSun">在</span><span style="font-family: SimSun">tinyXML</span><span style="font-family: SimSun">中,用<span style="font-family: SimSun">FirstChild</span><span style="font-family: SimSun">（</span><span style="font-family: SimSun">"</span><span style="font-family: SimSun">名字</span><span style="font-family: SimSun">"</span><span style="font-family: SimSun">）</span><span style="font-family: SimSun">查</span><span style="font-family: SimSun">找</span><span style="font-family: SimSun">节</span><span style="font-family: SimSun">点</span><span style="font-family: SimSun">时,<span style="font-family: SimSun">调</span><span style="font-family: SimSun">用</span><span style="font-family: SimSun">FirstChild</span><span style="font-family: SimSun">函数的</span><span style="font-family: SimSun">节</span><span style="font-family: SimSun">点与要</span><span style="font-family: SimSun">查</span><span style="font-family: SimSun">找的</span><span style="font-family: SimSun">节</span><span style="font-family: SimSun">点必</span><span style="font-family: SimSun">须</span><span style="font-family: SimSun">成</span><span style="font-family: SimSun">&#8220;</span><span style="font-family: SimSun">父子</span><span style="font-family: SimSun">关</span><span style="font-family: SimSun">系</span><span style="font-family: SimSun">&#8221;</span>。<br /><br /><span style="color: #0000ff">句柄<br /></span><br />想要健壮地读取一个XML文档，检查方法调用后的返回值是否为null是很重要的。一种安全的检错实现可能会产生像这样的代码： <br /><br /></span></span></p> <p>&nbsp;</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="../../Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">TiXmlElement</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;root&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;document.FirstChildElement(&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Document</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;);<br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(&nbsp;root&nbsp;)<br /><img id="Codehighlighter1_75_342_Open_Image" src="../../Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /></span><span id="Codehighlighter1_75_342_Open_Text"><span style="color: #000000">{<br /><img src="../../Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />TiXmlElement</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;element&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;root</span><span style="color: #000000">-&gt;</span><span style="color: #000000">FirstChildElement(&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Element</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;);<br /><img src="../../Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(&nbsp;element&nbsp;)<br /><img id="Codehighlighter1_154_342_Open_Image" src="../../Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /></span><span id="Codehighlighter1_154_342_Open_Text"><span style="color: #000000">{<br /><img src="../../Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />TiXmlElement</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;child&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;element</span><span style="color: #000000">-&gt;</span><span style="color: #000000">FirstChildElement(&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Child</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;);<br /><img src="../../Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(&nbsp;child&nbsp;)<br /><img id="Codehighlighter1_230_342_Open_Image" src="../../Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /></span><span id="Codehighlighter1_230_342_Open_Text"><span style="color: #000000">{<br /><img src="../../Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />TiXmlElement</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;child2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;child</span><span style="color: #000000">-&gt;</span><span style="color: #000000">NextSiblingElement(&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Child</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;);<br /><img src="../../Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(&nbsp;child2&nbsp;)<br /><img id="Codehighlighter1_307_342_Open_Image" src="../../Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /></span><span id="Codehighlighter1_307_342_Open_Text"><span style="color: #000000">{<br /><img src="../../Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Finally&nbsp;do&nbsp;something&nbsp;useful.&nbsp;<br /><img src="../../Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span></span></span></span></span></div> <p><br /><br />用句柄的话就不会这么冗长了，使用TiXmlHandle类，前面的代码就会变成这样： <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="../../Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">TiXmlHandle&nbsp;docHandle(&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">document&nbsp;);<br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />TiXmlElement</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;child2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;docHandle.FirstChild(&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Document</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;).FirstChild(&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Element</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;).Child(&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Child</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">&nbsp;).ToElement();<br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(&nbsp;child2&nbsp;)<br /><img id="Codehighlighter1_165_191_Open_Image" src="../../Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /></span><span id="Codehighlighter1_165_191_Open_Text"><span style="color: #000000">{<br /><img src="../../Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;do&nbsp;something&nbsp;useful&nbsp;<br /><img src="../../Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span></span></div> <br /><span style="color: red">一、读取XML,设置节点文本</span><br />如下XML片段:<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="../../Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;?</span><span style="color: #ff00ff">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"&nbsp;standalone="yes"&nbsp;</span><span style="color: #0000ff">?&gt;</span><span style="color: #000000"><br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">ZXML</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">ZAPP</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">VBS_RUNTIME_PARAMS</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">BROADCAST_VERSION&nbsp;</span><span style="color: #ff0000">info</span><span style="color: #0000ff">="版本"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">8</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">BROADCAST_VERSION</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">Broadcast</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">FileCount&nbsp;</span><span style="color: #ff0000">info</span><span style="color: #0000ff">="资源文件个数"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">69</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">FileCount</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">SOURCE_1</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">ID&nbsp;</span><span style="color: #ff0000">info</span><span style="color: #0000ff">="图片编号"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">1</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">ID</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">Version&nbsp;</span><span style="color: #ff0000">info</span><span style="color: #0000ff">="图片版本"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">1</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">Version</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">Path&nbsp;</span><span style="color: #ff0000">info</span><span style="color: #0000ff">="图片路径"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/mnt/share/1.bmp</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">Path</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">FileMode&nbsp;</span><span style="color: #ff0000">info</span><span style="color: #0000ff">="文件处理模式"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">0</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">FileMode</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">SOURCE_1</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">SOURCE_2</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">Path&nbsp;</span><span style="color: #ff0000">info</span><span style="color: #0000ff">="图片路径"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/mnt/share/2.bmp</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">Path</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">ID&nbsp;</span><span style="color: #ff0000">info</span><span style="color: #0000ff">="图片编号"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">2</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">ID</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">Version&nbsp;</span><span style="color: #ff0000">info</span><span style="color: #0000ff">="图片版本"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">1</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">Version</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">FileMode&nbsp;</span><span style="color: #ff0000">info</span><span style="color: #0000ff">="文件处理模式"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">0</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">FileMode</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">SOURCE_2</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src="../../Images/dot.gif"  alt="" /><img src="../../Images/dot.gif"  alt="" />.<br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">Broadcast</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">VBS_RUNTIME_PARAMS</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">ZAPP</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">ZXML</span><span style="color: #0000ff">&gt;</span></div> <br /><br />要设置BROADCAST_VERSION节点的值 8为其他值,可参考如下代码(将值加1):<br />用ReplaceChild( TiXmlNode* replaceThis, const TiXmlNode&amp; withThis )方法替换<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="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp; <span style="color: #000000">TiXmlDocument&nbsp;doc("zapp.conf");<br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;doc.LoadFile();<br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;TiXmlHandle&nbsp;docHandle(&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">doc&nbsp;);<br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />TiXmlElement</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;Broadcast_ver&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;docHandle.FirstChild(</span><span style="color: #000000">"</span><span style="color: #000000">ZXML</span><span style="color: #000000">"</span><span style="color: #000000">).FirstChild(</span><span style="color: #000000">"</span><span style="color: #000000">ZAPP</span><span style="color: #000000">"</span><span style="color: #000000">).FirstChild(</span><span style="color: #000000">"</span><span style="color: #000000">VBS_RUNTIME_PARAMS</span><span style="color: #000000">"</span><span style="color: #000000">).FirstChildElement(</span><span style="color: #000000">"</span><span style="color: #000000">BROADCAST_VERSION</span><span style="color: #000000">"</span><span style="color: #000000">).ToElement();<br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;TiXmlNode&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;oldnode&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;&nbsp;Broadcast_ver</span><span style="color: #000000">-&gt;</span><span style="color: #000000">FirstChild();<br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">const</span>&nbsp;<span style="color: #0000ff">char</span>&nbsp;<span style="color: #000000">*</span><span style="color: #000000">ver&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Broadcast_ver</span><span style="color: #000000">-&gt;</span><span style="color: #000000">GetText();<br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;oldVer&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;atoi(ver);<br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;CString&nbsp;newVer;<br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;newVer.Format(</span><span style="color: #000000">"</span><span style="color: #000000">%d</span><span style="color: #000000">"</span><span style="color: #000000">,oldVer</span><span style="color: #000000">+</span><span style="color: #000000">1</span><span style="color: #000000">);<br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;TiXmlText&nbsp;newText(newVer);<br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;Broadcast_ver</span><span style="color: #000000">-&gt;</span><span style="color: #000000">ReplaceChild(oldnode,newText);<br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp; AfxMessageBox(Broadcast_ver</span><span style="color: #000000">-&gt;</span><span style="color: #000000">GetText());</span><span style="color: #008000">//</span><span style="color: #008000">输出值</span><span style="color: #008000"><br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp; </span><span style="color: #000000">doc.SaveFile();</span></div> <br /><span style="color: red">二,删除节点,属性值</span><br /><br />RemoveChild( TiXmlNode* removeThis )方法删除父节点的子节点,<br />RemoveAttribute( const char * name )方法删除属性值.<br /><br />例如删除BROADCAST_VERSION节点<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="../../Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">TiXmlHandle&nbsp;docHandle(&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">doc&nbsp;);<br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;TiXmlElement</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;Broadcast_ver&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;docHandle.FirstChild(</span><span style="color: #000000">"</span><span style="color: #000000">ZXML</span><span style="color: #000000">"</span><span style="color: #000000">).FirstChild(</span><span style="color: #000000">"</span><span style="color: #000000">ZAPP</span><span style="color: #000000">"</span><span style="color: #000000">).FirstChild(</span><span style="color: #000000">"</span><span style="color: #000000">VBS_RUNTIME_PARAMS</span><span style="color: #000000">"</span><span style="color: #000000">).ToElement();<br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" /><br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;TiXmlNode&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;node&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;&nbsp;Broadcast_ver</span><span style="color: #000000">-&gt;</span><span style="color: #000000">FirstChild(</span><span style="color: #000000">"</span><span style="color: #000000">BROADCAST_VERSION</span><span style="color: #000000">"</span><span style="color: #000000">);<br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" /><br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;Broadcast_ver</span><span style="color: #000000">-&gt;</span><span style="color: #000000">RemoveChild(node);</span></div> <br />也可以删除整个SOURCE_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; background-color: #eeeeee"><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">TiXmlHandle&nbsp;docHandle(&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">doc&nbsp;);<br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;TiXmlElement</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;Broadcast&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;docHandle.FirstChild(</span><span style="color: #000000">"</span><span style="color: #000000">ZXML</span><span style="color: #000000">"</span><span style="color: #000000">).FirstChild(</span><span style="color: #000000">"</span><span style="color: #000000">ZAPP</span><span style="color: #000000">"</span><span style="color: #000000">).FirstChild(</span><span style="color: #000000">"</span><span style="color: #000000">VBS_RUNTIME_PARAMS</span><span style="color: #000000">"</span><span style="color: #000000">).FirstChild(</span><span style="color: #000000">"</span><span style="color: #000000">Broadcast</span><span style="color: #000000">"</span><span style="color: #000000">).ToElement();<br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" /><br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;TiXmlNode&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;node&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;&nbsp;Broadcast</span><span style="color: #000000">-&gt;</span><span style="color: #000000">FirstChild(</span><span style="color: #000000">"</span><span style="color: #000000">SOURCE_1</span><span style="color: #000000">"</span><span style="color: #000000">);<br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" /><br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;Broadcast</span><span style="color: #000000">-&gt;</span><span style="color: #000000">RemoveChild(node);</span></div> <br />删除BROADCAST_VERSION的info属性:<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="../../Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">TiXmlHandle&nbsp;docHandle(&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">doc&nbsp;);<br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;TiXmlElement</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;Broadcast_ver&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;docHandle.FirstChild(</span><span style="color: #000000">"</span><span style="color: #000000">ZXML</span><span style="color: #000000">"</span><span style="color: #000000">).FirstChild(</span><span style="color: #000000">"</span><span style="color: #000000">ZAPP</span><span style="color: #000000">"</span><span style="color: #000000">).FirstChild(</span><span style="color: #000000">"</span><span style="color: #000000">VBS_RUNTIME_PARAMS</span><span style="color: #000000">"</span><span style="color: #000000">).FirstChildElement(</span><span style="color: #000000">"</span><span style="color: #000000">BROADCAST_VERSION</span><span style="color: #000000">"</span><span style="color: #000000">).ToElement();<br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" /><br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;Broadcast_ver</span><span style="color: #000000">-&gt;</span><span style="color: #000000">RemoveAttribute(</span><span style="color: #000000">"</span><span style="color: #000000">info</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">删除info</span></div> <br />可以借助NextSiblingElement()方法实现递归删除.<br /><br /><span style="color: red">三,添加节点,属性值</span><br /><br />例如在SOURCE_3下添加BROADCAST_PID节点:<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="../../Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">TiXmlHandle&nbsp;docHandle(&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">doc&nbsp;);<br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;TiXmlElement</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;Broadcast&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;docHandle.FirstChild(</span><span style="color: #000000">"</span><span style="color: #000000">ZXML</span><span style="color: #000000">"</span><span style="color: #000000">).FirstChild(</span><span style="color: #000000">"</span><span style="color: #000000">ZAPP</span><span style="color: #000000">"</span><span style="color: #000000">).FirstChild(</span><span style="color: #000000">"</span><span style="color: #000000">VBS_RUNTIME_PARAMS</span><span style="color: #000000">"</span><span style="color: #000000">).FirstChild(</span><span style="color: #000000">"</span><span style="color: #000000">Broadcast</span><span style="color: #000000">"</span><span style="color: #000000">).ToElement();<br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;TiXmlElement</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;Broadcast_Pid&nbsp;</span><span style="color: #000000">=</span>&nbsp;<span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;TiXmlElement(</span><span style="color: #000000">"</span><span style="color: #000000">BROADCAST_PID</span><span style="color: #000000">"</span><span style="color: #000000">);<br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;TiXmlText&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">text&nbsp;</span><span style="color: #000000">=</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;TiXmlText(</span><span style="color: #000000">"</span><span style="color: #000000">7215</span><span style="color: #000000">"</span><span style="color: #000000">);<br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;Broadcast_Pid</span><span style="color: #000000">-&gt;</span><span style="color: #000000">SetAttribute(</span><span style="color: #000000">"</span><span style="color: #000000">info</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">the&nbsp;pid</span><span style="color: #000000">"</span><span style="color: #000000">);<br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;Broadcast_Pid</span><span style="color: #000000">-&gt;</span><span style="color: #000000">LinkEndChild(text);<br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;Broadcast</span><span style="color: #000000">-&gt;</span><span style="color: #000000">LinkEndChild(Broadcast_Pid);</span></div> <br />将在SOURCE_3后添加新的节点:<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="../../Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">BROADCAST_PID&nbsp;</span><span style="color: #ff0000">info</span><span style="color: #0000ff">="the&nbsp;pid"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">7215</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">BROADCAST_PID</span><span style="color: #0000ff">&gt;</span></div> <br /><span style="color: red">四,最后说一下中文乱码的问题<br /></span><br />乱码是由于GB2312与 UTF8之间转换不当造成的,tinyxml在处理UTF8本身没有问题,当你打开一个UTF8的文档,可以在加载的时候指定UTF8的方式,或者文档声 明处指明的编码格式,tinyxml会按照相应的编码格式加载,但很多时候当我们输出或写入中文字段时会出现乱码,无论在内存,还是打印出来的内容.这是 因为我们的软件通常是GB2312编码,而读取或写入的内容是UTF8,自然就会出错.可以借助网上的两个函数来实现转换(原作者不详):<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="../../Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;ConvertUtf8ToGBK(CString</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;strUtf8)&nbsp;<br /><img id="Codehighlighter1_43_541_Open_Image" src="../../Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_43_541_Open_Text"><span style="color: #000000">{<br /><img src="../../Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;len</span><span style="color: #000000">=</span><span style="color: #000000">MultiByteToWideChar(CP_UTF8,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;(LPCTSTR)strUtf8,&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">,&nbsp;NULL,</span><span style="color: #000000">0</span><span style="color: #000000">);<br /><img src="../../Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;</span><span style="color: #0000ff">short</span>&nbsp;<span style="color: #000000">*</span><span style="color: #000000">&nbsp;wszGBK&nbsp;</span><span style="color: #000000">=</span>&nbsp;<span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;unsigned&nbsp;</span><span style="color: #0000ff">short</span><span style="color: #000000">[len</span><span style="color: #000000">+</span><span style="color: #000000">1</span><span style="color: #000000">];<br /><img src="../../Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(wszGBK,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;len&nbsp;</span><span style="color: #000000">*</span>&nbsp;<span style="color: #000000">2</span>&nbsp;<span style="color: #000000">+</span>&nbsp;<span style="color: #000000">2</span><span style="color: #000000">);<br /><img src="../../Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MultiByteToWideChar(CP_UTF8,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;(LPCTSTR)strUtf8,&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">,&nbsp;wszGBK,&nbsp;len);<br /><img src="../../Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br /><img src="../../Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;len&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;WideCharToMultiByte(CP_ACP,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;wszGBK,&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">,&nbsp;NULL,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;NULL,&nbsp;NULL);<br /><img src="../../Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">char</span>&nbsp;<span style="color: #000000">*</span><span style="color: #000000">szGBK</span><span style="color: #000000">=</span><span style="color: #0000ff">new</span>&nbsp;<span style="color: #0000ff">char</span><span style="color: #000000">[len&nbsp;</span><span style="color: #000000">+</span>&nbsp;<span style="color: #000000">1</span><span style="color: #000000">];<br /><img src="../../Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(szGBK,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;len&nbsp;</span><span style="color: #000000">+</span>&nbsp;<span style="color: #000000">1</span><span style="color: #000000">);<br /><img src="../../Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WideCharToMultiByte&nbsp;(CP_ACP,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;wszGBK,&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">,&nbsp;szGBK,&nbsp;len,&nbsp;NULL,NULL);<br /><img src="../../Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br /><img src="../../Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strUtf8&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;szGBK;<br /><img src="../../Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete[]&nbsp;szGBK;<br /><img src="../../Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete[]&nbsp;wszGBK;<br /><img src="../../Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" /><br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" /><br /><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;ConvertGBKToUtf8(CString</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;strGBK)<br /><img id="Codehighlighter1_586_1092_Open_Image" src="../../Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_586_1092_Open_Text"><span style="color: #000000">{<br /><img src="../../Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;len</span><span style="color: #000000">=</span><span style="color: #000000">MultiByteToWideChar(CP_ACP,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;(LPCTSTR)strGBK,&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">,&nbsp;NULL,</span><span style="color: #000000">0</span><span style="color: #000000">);<br /><img src="../../Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;</span><span style="color: #0000ff">short</span>&nbsp;<span style="color: #000000">*</span><span style="color: #000000">&nbsp;wszUtf8&nbsp;</span><span style="color: #000000">=</span>&nbsp;<span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;unsigned&nbsp;</span><span style="color: #0000ff">short</span><span style="color: #000000">[len</span><span style="color: #000000">+</span><span style="color: #000000">1</span><span style="color: #000000">];<br /><img src="../../Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(wszUtf8,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;len&nbsp;</span><span style="color: #000000">*</span>&nbsp;<span style="color: #000000">2</span>&nbsp;<span style="color: #000000">+</span>&nbsp;<span style="color: #000000">2</span><span style="color: #000000">);<br /><img src="../../Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MultiByteToWideChar(CP_ACP,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;(LPCTSTR)strGBK,&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">,&nbsp;wszUtf8,&nbsp;len);<br /><img src="../../Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br /><img src="../../Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;len&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;WideCharToMultiByte(CP_UTF8,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;wszUtf8,&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">,&nbsp;NULL,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;NULL,&nbsp;NULL);<br /><img src="../../Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">char</span>&nbsp;<span style="color: #000000">*</span><span style="color: #000000">szUtf8</span><span style="color: #000000">=</span><span style="color: #0000ff">new</span>&nbsp;<span style="color: #0000ff">char</span><span style="color: #000000">[len&nbsp;</span><span style="color: #000000">+</span>&nbsp;<span style="color: #000000">1</span><span style="color: #000000">];<br /><img src="../../Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(szUtf8,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;len&nbsp;</span><span style="color: #000000">+</span>&nbsp;<span style="color: #000000">1</span><span style="color: #000000">);<br /><img src="../../Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WideCharToMultiByte&nbsp;(CP_UTF8,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;wszUtf8,&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">,&nbsp;szUtf8,&nbsp;len,&nbsp;NULL,NULL);<br /><img src="../../Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br /><img src="../../Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strGBK&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;szUtf8;<br /><img src="../../Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete[]&nbsp;szUtf8;<br /><img src="../../Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete[]&nbsp;wszUtf8;<br /><img src="../../Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div> <br />当然,你也可以用MultiByteToWideChar,WideCharToMultiByte函数自己实现转换.以上是简单应用的几个举例,理解他们,相信你已经能写出满足自己需要的代码了.   		</div><img src ="http://www.cppblog.com/programmer/aggbug/159208.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/programmer/" target="_blank">lxw</a> 2011-10-27 11:53 <a href="http://www.cppblog.com/programmer/articles/159208.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>实现应用程序崩溃后自动重启</title><link>http://www.cppblog.com/programmer/articles/159029.html</link><dc:creator>lxw</dc:creator><author>lxw</author><pubDate>Tue, 25 Oct 2011 01:44:00 GMT</pubDate><guid>http://www.cppblog.com/programmer/articles/159029.html</guid><wfw:comment>http://www.cppblog.com/programmer/comments/159029.html</wfw:comment><comments>http://www.cppblog.com/programmer/articles/159029.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/programmer/comments/commentRss/159029.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/programmer/services/trackbacks/159029.html</trackback:ping><description><![CDATA[<p><span style="font-family: Comic Sans MS; font-size: 18pt"><span style="font-family: Comic Sans MS; font-size: 18pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>题记：对于崩溃，当然正确的态度应该在开发的时候就把好关，应该写好代码，写高质量的代码，有崩溃还是应该从程序中找原因。但实现程序崩溃后自动重启，对于服务端程序还是有必要的，防止崩溃了没人管。<br /><br />相关aip：<br />SetErrorMode(1|2);&nbsp;<br />在程序里加上该代码后，程序崩溃时自动从内存中消失而不会弹出像&#8220;xxx内存不能为read&#8221;之类的消息框，让你点确定。<br />SetUnhandledExceptionFilter(MyUnhandledExceptionFilter);<br />设置自定义的异常处理函数，程序崩溃时系统会调用自定义的MyUnhandledExceptionFilter,可以在这个函数中做相应的处理如调用WinExc重启。在使用守护进程和wathdog技术处理时也可以利用这个api来区分是异常退出还是人为关闭的。<br />调用示例：</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #000000">#include&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">dbghelp.h</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />#include&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">shellapi.h</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />#include&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">shlobj.h</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;自定义的exectpion&nbsp;filter</span><span style="color: #008000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #000000">LONG&nbsp;WINAPI&nbsp;MyUnhandledExceptionFilter(</span><span style="color: #0000ff">struct</span><span style="color: #000000">&nbsp;_EXCEPTION_POINTERS&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">pExceptionPointers)<br /><img id="Codehighlighter1_176_3029_Open_Image" onclick="this.style.display='none'; Codehighlighter1_176_3029_Open_Text.style.display='none'; Codehighlighter1_176_3029_Closed_Image.style.display='inline'; Codehighlighter1_176_3029_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_176_3029_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_176_3029_Closed_Text.style.display='none'; Codehighlighter1_176_3029_Open_Image.style.display='inline'; Codehighlighter1_176_3029_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_176_3029_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_176_3029_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;SetErrorMode(&nbsp;SEM_NOGPFAULTERRORBOX&nbsp;);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">收集信息</span><span style="color: #008000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CStringW&nbsp;strBuild;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;strBuild.Format(L</span><span style="color: #000000">"</span><span style="color: #000000">Build:&nbsp;%s&nbsp;%s</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;__DATE__,&nbsp;__TIME__);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;CStringW&nbsp;strError;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;HMODULE&nbsp;hModule;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;WCHAR&nbsp;szModuleName[MAX_PATH]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;L</span><span style="color: #000000">""</span><span style="color: #000000">;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS,&nbsp;(LPCWSTR)pExceptionPointers</span><span style="color: #000000">-&gt;</span><span style="color: #000000">ExceptionRecord</span><span style="color: #000000">-&gt;</span><span style="color: #000000">ExceptionAddress,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">hModule);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;GetModuleFileName(hModule,&nbsp;szModuleName,&nbsp;ARRAYSIZE(szModuleName));<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;strError.AppenedFormat(L</span><span style="color: #000000">"</span><span style="color: #000000">%s&nbsp;%d&nbsp;,&nbsp;%d&nbsp;,%d.</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;szModuleName,pExceptionPointers</span><span style="color: #000000">-&gt;</span><span style="color: #000000">ExceptionRecord</span><span style="color: #000000">-&gt;</span><span style="color: #000000">ExceptionCode,&nbsp;pExceptionPointers</span><span style="color: #000000">-&gt;</span><span style="color: #000000">ExceptionRecord</span><span style="color: #000000">-&gt;</span><span style="color: #000000">ExceptionFlags,&nbsp;pExceptionPointers</span><span style="color: #000000">-&gt;</span><span style="color: #000000">ExceptionRecord</span><span style="color: #000000">-&gt;</span><span style="color: #000000">ExceptionAddress);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">生成&nbsp;mini&nbsp;crash&nbsp;dump</span><span style="color: #008000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;bMiniDumpSuccessful;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;WCHAR&nbsp;szPath[MAX_PATH];&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;WCHAR&nbsp;szFileName[MAX_PATH];&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;WCHAR</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;szAppName&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;L</span><span style="color: #000000">"</span><span style="color: #000000">AppName</span><span style="color: #000000">"</span><span style="color: #000000">;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;WCHAR</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;szVersion&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;L</span><span style="color: #000000">"</span><span style="color: #000000">v1.0</span><span style="color: #000000">"</span><span style="color: #000000">;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;dwBufferSize&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;MAX_PATH;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;HANDLE&nbsp;hDumpFile;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;SYSTEMTIME&nbsp;stLocalTime;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;MINIDUMP_EXCEPTION_INFORMATION&nbsp;ExpParam;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;GetLocalTime(&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">stLocalTime&nbsp;);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;GetTempPath(&nbsp;dwBufferSize,&nbsp;szPath&nbsp;);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;StringCchPrintf(&nbsp;szFileName,&nbsp;MAX_PATH,&nbsp;L</span><span style="color: #000000">"</span><span style="color: #000000">%s%s</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;szPath,&nbsp;szAppName&nbsp;);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;CreateDirectory(&nbsp;szFileName,&nbsp;NULL&nbsp;);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;StringCchPrintf(&nbsp;szFileName,&nbsp;MAX_PATH,&nbsp;L</span><span style="color: #000000">"</span><span style="color: #000000">%s%s//%s-%04d%02d%02d-%02d%02d%02d-%ld-%ld.dmp</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;szPath,&nbsp;szAppName,&nbsp;szVersion,&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stLocalTime.wYear,&nbsp;stLocalTime.wMonth,&nbsp;stLocalTime.wDay,&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stLocalTime.wHour,&nbsp;stLocalTime.wMinute,&nbsp;stLocalTime.wSecond,&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetCurrentProcessId(),&nbsp;GetCurrentThreadId());<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;hDumpFile&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;CreateFile(szFileName,&nbsp;GENERIC_READ</span><span style="color: #000000">|</span><span style="color: #000000">GENERIC_WRITE,&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FILE_SHARE_WRITE</span><span style="color: #000000">|</span><span style="color: #000000">FILE_SHARE_READ,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;CREATE_ALWAYS,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;MINIDUMP_USER_STREAM&nbsp;UserStream[</span><span style="color: #000000">2</span><span style="color: #000000">];<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;MINIDUMP_USER_STREAM_INFORMATION&nbsp;UserInfo;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;UserInfo.UserStreamCount&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;UserInfo.UserStreamArray&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;UserStream;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;UserStream[</span><span style="color: #000000">0</span><span style="color: #000000">].Type&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;CommentStreamW;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;UserStream[</span><span style="color: #000000">0</span><span style="color: #000000">].BufferSize&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;strBuild.GetLength()</span><span style="color: #000000">*</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(WCHAR);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;UserStream[</span><span style="color: #000000">0</span><span style="color: #000000">].Buffer&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;strBuild.GetBuffer();<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;UserStream[</span><span style="color: #000000">1</span><span style="color: #000000">].Type&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;CommentStreamW;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;UserStream[</span><span style="color: #000000">1</span><span style="color: #000000">].BufferSize&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;strError.GetLength()</span><span style="color: #000000">*</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(WCHAR);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;UserStream[</span><span style="color: #000000">1</span><span style="color: #000000">].Buffer&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;strError.GetBuffer();<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;ExpParam.ThreadId&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;GetCurrentThreadId();<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;ExpParam.ExceptionPointers&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;pExceptionPointers;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;ExpParam.ClientPointers&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;TRUE;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;MINIDUMP_TYPE&nbsp;MiniDumpWithDataSegs&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;MiniDumpNormal&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">|</span><span style="color: #000000">&nbsp;MiniDumpWithHandleData&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">|</span><span style="color: #000000">&nbsp;MiniDumpWithUnloadedModules&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">|</span><span style="color: #000000">&nbsp;MiniDumpWithIndirectlyReferencedMemory&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">|</span><span style="color: #000000">&nbsp;MiniDumpScanMemory&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">|</span><span style="color: #000000">&nbsp;MiniDumpWithProcessThreadData&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">|</span><span style="color: #000000">&nbsp;MiniDumpWithThreadInfo;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;bMiniDumpSuccessful&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;MiniDumpWriteDump(GetCurrentProcess(),&nbsp;GetCurrentProcessId(),&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hDumpFile,&nbsp;MiniDumpWithDataSegs,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">ExpParam,&nbsp;NULL,&nbsp;NULL);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;上传mini&nbsp;dump&nbsp;到自己服务器（略）</span><span style="color: #008000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;<img src="http://www.cppblog.com/Images/dot.gif"  alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;EXCEPTION_CONTINUE_SEARCH;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">或者&nbsp;EXCEPTION_EXECUTE_HANDLER&nbsp;关闭程序</span><span style="color: #008000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" /></span><span style="color: #000000">}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;_tmain()<br /><img id="Codehighlighter1_3046_3151_Open_Image" onclick="this.style.display='none'; Codehighlighter1_3046_3151_Open_Text.style.display='none'; Codehighlighter1_3046_3151_Closed_Image.style.display='inline'; Codehighlighter1_3046_3151_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_3046_3151_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_3046_3151_Closed_Text.style.display='none'; Codehighlighter1_3046_3151_Open_Image.style.display='inline'; Codehighlighter1_3046_3151_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_3046_3151_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_3046_3151_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;设置&nbsp;execption&nbsp;filter</span><span style="color: #008000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;SetUnhandledExceptionFilter(MyUnhandledExceptionFilter);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;<img src="http://www.cppblog.com/Images/dot.gif"  alt="" />.<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span></div>
<p><br />在windows系统中有类型为服务的程序可以在服务属性里设置为失败重启即可，可以用代码实现</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #000000">ChangeServiceConfig2(<img src="http://www.cppblog.com/Images/dot.gif"  alt="" />,&nbsp;SERVICE_CONFIG_FAILURE_ACTIONS&nbsp;<img src="http://www.cppblog.com/Images/dot.gif"  alt="" />)<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />SC_ACTION_RESTART</span></div>
<p>网上也有一些异常捕获库如CrashRpt，可以方便是处理异常。<br /><a href="http://www.codeproject.com/KB/debug/crash_report.aspx">http://www.codeproject.com/KB/debug/crash_report.aspx</a></span></p><img src ="http://www.cppblog.com/programmer/aggbug/159029.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/programmer/" target="_blank">lxw</a> 2011-10-25 09:44 <a href="http://www.cppblog.com/programmer/articles/159029.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>应用程序正常初始化失败问题解决流程</title><link>http://www.cppblog.com/programmer/articles/158218.html</link><dc:creator>lxw</dc:creator><author>lxw</author><pubDate>Thu, 13 Oct 2011 06:14:00 GMT</pubDate><guid>http://www.cppblog.com/programmer/articles/158218.html</guid><wfw:comment>http://www.cppblog.com/programmer/comments/158218.html</wfw:comment><comments>http://www.cppblog.com/programmer/articles/158218.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/programmer/comments/commentRss/158218.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/programmer/services/trackbacks/158218.html</trackback:ping><description><![CDATA[<div><strong style="font-family: Comic Sans MS;">问题情境：<br />&nbsp;在项目中使用了visual leak detector，调试时程序无法启动报错&#8220;应用程序正常启动失败&#8221;<br />解决流程：<br />查看vs输出信息最后一条是 <div>"LDR: LdrpWalkImportDescriptor() failed to probe f:\svn_ais_project\project\ais_client\AIS_Client_6.15\AIS\debug\vld.dll for its manifest, ntstatus 0xc0150002"<br />在网上多方查找有<div>http://blog.csdn.net/evilswords/article/details/5698851</div><div>http://blog.csdn.net/brook0344/article/details/6685724</div>这两篇有解决办法。<br /><div><p>把VLD中的这个复制到执行文件夹下就正常了</p> <p>Microsoft.VC90.CRT.manifest。</p><p><br /></p></div></div><br /><br /></strong></div><img src ="http://www.cppblog.com/programmer/aggbug/158218.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/programmer/" target="_blank">lxw</a> 2011-10-13 14:14 <a href="http://www.cppblog.com/programmer/articles/158218.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>