﻿<?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++博客-Robertxiao-随笔分类-天马行空</title><link>http://www.cppblog.com/Robertxiao/category/5521.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 09 Nov 2012 01:34:44 GMT</lastBuildDate><pubDate>Fri, 09 Nov 2012 01:34:44 GMT</pubDate><ttl>60</ttl><item><title>由"某地人能做到"这个口号想到的</title><link>http://www.cppblog.com/Robertxiao/archive/2009/08/17/93555.html</link><dc:creator>Robertxiao</dc:creator><author>Robertxiao</author><pubDate>Mon, 17 Aug 2009 02:03:00 GMT</pubDate><guid>http://www.cppblog.com/Robertxiao/archive/2009/08/17/93555.html</guid><wfw:comment>http://www.cppblog.com/Robertxiao/comments/93555.html</wfw:comment><comments>http://www.cppblog.com/Robertxiao/archive/2009/08/17/93555.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Robertxiao/comments/commentRss/93555.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Robertxiao/services/trackbacks/93555.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 由口号想到的。。。。&nbsp;&nbsp;<a href='http://www.cppblog.com/Robertxiao/archive/2009/08/17/93555.html'>阅读全文</a><img src ="http://www.cppblog.com/Robertxiao/aggbug/93555.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Robertxiao/" target="_blank">Robertxiao</a> 2009-08-17 10:03 <a href="http://www.cppblog.com/Robertxiao/archive/2009/08/17/93555.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>由visual studio 编译优化而获得的启示</title><link>http://www.cppblog.com/Robertxiao/archive/2009/07/23/90934.html</link><dc:creator>Robertxiao</dc:creator><author>Robertxiao</author><pubDate>Thu, 23 Jul 2009 08:01:00 GMT</pubDate><guid>http://www.cppblog.com/Robertxiao/archive/2009/07/23/90934.html</guid><wfw:comment>http://www.cppblog.com/Robertxiao/comments/90934.html</wfw:comment><comments>http://www.cppblog.com/Robertxiao/archive/2009/07/23/90934.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Robertxiao/comments/commentRss/90934.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Robertxiao/services/trackbacks/90934.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 今天，在运行目前正在维护的产品后，我发现产品在跑完个别的测试用例后，出现了大量的内存泄漏。从visual studio 2008的输出中看不到具体是哪个文件的new操作引起，在DEBUG版本中看不到是由哪个new分配的内存泄漏的原因是文件中没有如下的宏。&nbsp;&nbsp;<a href='http://www.cppblog.com/Robertxiao/archive/2009/07/23/90934.html'>阅读全文</a><img src ="http://www.cppblog.com/Robertxiao/aggbug/90934.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Robertxiao/" target="_blank">Robertxiao</a> 2009-07-23 16:01 <a href="http://www.cppblog.com/Robertxiao/archive/2009/07/23/90934.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>由正则表达式"\."引出的问题，而谈及DOS文件格式</title><link>http://www.cppblog.com/Robertxiao/archive/2009/04/28/81311.html</link><dc:creator>Robertxiao</dc:creator><author>Robertxiao</author><pubDate>Tue, 28 Apr 2009 05:48:00 GMT</pubDate><guid>http://www.cppblog.com/Robertxiao/archive/2009/04/28/81311.html</guid><wfw:comment>http://www.cppblog.com/Robertxiao/comments/81311.html</wfw:comment><comments>http://www.cppblog.com/Robertxiao/archive/2009/04/28/81311.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Robertxiao/comments/commentRss/81311.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Robertxiao/services/trackbacks/81311.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这段时间，公司要我整理一个有点历史的产品代码。由于项目历史久，长期又缺少管理，产品中的项目有点乱，以至于一个DLL模块配置的输出路径竟然有输出成exe可执行模块。存在这样问题的项目有30个左右，而且每个项目要改4个地方，因为有4种生成版本。如果手工去改的话实在很枯燥，但我们是程序员。所以就用代码了。<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"><span style="COLOR: #008080">&nbsp;1</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;更改所有资源的输出路径</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;get&nbsp;folder&nbsp;path</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">scriptName&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;wscript.scriptfullname<br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>scriptPath&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Left(scriptName,&nbsp;instrRev(scriptName,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">))<br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>scriptPath&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Left(scriptPath,&nbsp;Len(scriptPath)&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>scriptPath&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Left(scriptPath,&nbsp;instrRev(scriptPath,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">))<br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>folderPath&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;scriptPath&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Loc\</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;create&nbsp;filesystemobject&nbsp;activex&nbsp;object</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">Set&nbsp;fso&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;CreateObject(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Scripting.FileSystemObject</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>Set&nbsp;fol&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;fso.GetFolder(folderPath)<br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;visit&nbsp;each&nbsp;file&nbsp;which&nbsp;in&nbsp;the&nbsp;folder</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">fileshortName&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">""</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>Set&nbsp;fileArr&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;fol.Files<br></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>For&nbsp;each&nbsp;fil&nbsp;</span><span style="COLOR: #0000ff">in</span><span style="COLOR: #000000">&nbsp;fileArr<br></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;fileName&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;fil.name<br></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;LCase(Right(fileName,&nbsp;</span><span style="COLOR: #000000">7</span><span style="COLOR: #000000">))&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">.vcproj</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;Then<br></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fileshortName&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Left(fileName,Len(fileName)&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">7</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;LCase(Right(fileshortName,&nbsp;</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">))&nbsp;</span><span style="COLOR: #000000">&lt;&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">_enu</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;Then<br></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;modifyResource&nbsp;fil.path,status<br></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;status&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">False&nbsp;Then<br></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;errlist&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;errlist&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;&nbsp;fil.Path&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;vbCr<br></span><span style="COLOR: #008080">25</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If<br></span><span style="COLOR: #008080">26</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If<br></span><span style="COLOR: #008080">27</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If<br></span><span style="COLOR: #008080">28</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>Next<br></span><span style="COLOR: #008080">29</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">30</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;Tip&nbsp;when&nbsp;complete&nbsp;the&nbsp;work</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">31</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">If&nbsp;Len(errlist)&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;Then<br></span><span style="COLOR: #008080">32</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;MsgBox&nbsp;errlist&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Can&nbsp;not&nbsp;modify</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">33</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>Else<br></span><span style="COLOR: #008080">34</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;MsgBox&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">modify&nbsp;successfully</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">35</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>End&nbsp;If<br></span><span style="COLOR: #008080">36</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">37</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;modify&nbsp;the&nbsp;resource&nbsp;project&nbsp;setting.</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">38</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">Function&nbsp;modifyResource(filePath,status)<br></span><span style="COLOR: #008080">39</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>On&nbsp;Error&nbsp;Resume&nbsp;Next<br></span><span style="COLOR: #008080">40</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">41</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;resLanguage&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;UCase(Right(fileshortName,&nbsp;</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">))<br></span><span style="COLOR: #008080">42</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">43</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;Read&nbsp;Content</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">44</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;Set&nbsp;fRead&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;fso.opentextfile(filePath,&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">45</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;fContent&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;fRead.readAll<br></span><span style="COLOR: #008080">46</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;fRead.close<br></span><span style="COLOR: #008080">47</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">48</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;Replace&nbsp;each&nbsp;output&nbsp;file</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">49</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;changed&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;False<br></span><span style="COLOR: #008080">50</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Set&nbsp;regEx&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;New&nbsp;RegExp<br></span><span style="COLOR: #008080">51</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;regEx.pattern&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\bOutputFile=.+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">52</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;regEx.Global&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;True<br></span><span style="COLOR: #008080">53</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Set&nbsp;matches&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;regEx.Execute(fContent)<br></span><span style="COLOR: #008080">54</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Set&nbsp;childReg&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;New&nbsp;RegExp<br></span><span style="COLOR: #008080">55</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;For&nbsp;Each&nbsp;match&nbsp;</span><span style="COLOR: #0000ff">in</span><span style="COLOR: #000000">&nbsp;matches&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">56</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;LCase(Right(match.Value,&nbsp;</span><span style="COLOR: #000000">9</span><span style="COLOR: #000000">))&nbsp;</span><span style="COLOR: #000000">&lt;&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\loc.dll</span><span style="COLOR: #000000">"""</span><span style="COLOR: #000000">&nbsp;Then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">57</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmpValue&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;match.Value<br></span><span style="COLOR: #008080">58</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;childReg.pattern&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;tmpValue<br></span><span style="COLOR: #008080">59</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;instrRev(tmpValue,&nbsp;</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">&gt;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;Then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">60</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmpValue&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Left(tmpValue,&nbsp;instrRev(tmpvalue,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">))<br></span><span style="COLOR: #008080">61</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ElseIf&nbsp;instrRev(tmpValue,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;Then<br></span><span style="COLOR: #008080">62</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmpValue&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Left(tmpValue,instrRev(tmpValue,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">))<br></span><span style="COLOR: #008080">63</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If<br></span><span style="COLOR: #008080">64</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmpValue&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;tmpValue&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;resLanguage&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\loc.dll</span><span style="COLOR: #000000">"""</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">65</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;childMatches&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;childReg.Execute(fContent)<br></span><span style="COLOR: #008080">66</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;fContent&nbsp;=&nbsp;childReg.Replace(fContent,&nbsp;tmpValue)</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">67</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fContent&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Replace(fContent,&nbsp;match.Value,&nbsp;tmpValue)<br></span><span style="COLOR: #008080">68</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;changed&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;True<br></span><span style="COLOR: #008080">69</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If<br></span><span style="COLOR: #008080">70</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Next&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">71</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">72</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;write&nbsp;back</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">73</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;changed</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">True&nbsp;Then<br></span><span style="COLOR: #008080">74</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set&nbsp;fWrite&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;fso.opentextfile(filePath,&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,&nbsp;False)<br></span><span style="COLOR: #008080">75</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fWrite.Write&nbsp;fContent<br></span><span style="COLOR: #008080">76</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fWrite.close<br></span><span style="COLOR: #008080">77</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If<br></span><span style="COLOR: #008080">78</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;clear&nbsp;error</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">79</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;Not&nbsp;err.number&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;Then<br></span><span style="COLOR: #008080">80</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;err.clear<br></span><span style="COLOR: #008080">81</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;status&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;False<br></span><span style="COLOR: #008080">82</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Else<br></span><span style="COLOR: #008080">83</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;status&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;True<br></span><span style="COLOR: #008080">84</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If<br></span><span style="COLOR: #008080">85</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>End&nbsp;Function</span></div>
<br>运行结果符合我们的要求。<br>&nbsp;&nbsp;&nbsp;用ultraEdit打开文件时，会提示是否要转换成DOS文件格式，但在转换前用ultraEdit打开不会出现这种问题。问题出在哪儿呢？这还得从DOS文件与非DOS文件格式的区别分析，这两种文件的差别就是一些控制符不同，如DOS是用\r\n来换行，而Unix是用\n来换行。有了这个分析，就知道问题出在哪了。原因是正则表达式<br>regEx.pattern = "\bOutputFile=.+"这个表达式把后面的"\r"也匹配进去了，而后来随着替换字符串时而消失了。所以上面的正则应写成regEx.pattern = "\bOutputFile=.+"""。改好之后运行，再用ultraEdit打开不会出现这个提示了。
<img src ="http://www.cppblog.com/Robertxiao/aggbug/81311.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Robertxiao/" target="_blank">Robertxiao</a> 2009-04-28 13:48 <a href="http://www.cppblog.com/Robertxiao/archive/2009/04/28/81311.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>管理项目的版本号</title><link>http://www.cppblog.com/Robertxiao/archive/2009/04/24/80924.html</link><dc:creator>Robertxiao</dc:creator><author>Robertxiao</author><pubDate>Fri, 24 Apr 2009 02:45:00 GMT</pubDate><guid>http://www.cppblog.com/Robertxiao/archive/2009/04/24/80924.html</guid><wfw:comment>http://www.cppblog.com/Robertxiao/comments/80924.html</wfw:comment><comments>http://www.cppblog.com/Robertxiao/archive/2009/04/24/80924.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Robertxiao/comments/commentRss/80924.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Robertxiao/services/trackbacks/80924.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;现在，很多公司都是在用免费的SVN工具来管理版本。如何让可执行程序与DLL的信息与生成时的SVN版本相对应呢？以便于更好地跟踪项目呢？在原来我是用一段脚本来实现的。<br>分为Version.h, Version.rc,和一段脚本。<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: #008000">//</span><span style="COLOR: #008000">Version.h</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;SHADOW_MAJOR_VERSION&nbsp;4</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;SHADOW_MINOR_VERSION&nbsp;5</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;SHADOW_BETA_MAJOR_VERSION&nbsp;7</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;SHADOW_BETA_MINOR_VERSION&nbsp;155</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;SHADOW_VERSION&nbsp;"4.5.7.155"</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;SHADOW_REVISION&nbsp;"0"</span></div>
<br>在version.rc中，包含Version.h并把相应的版本信息用上面的SHADOW_REVISION及 SHADOW_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"><span style="COLOR: #008080">&nbsp;1</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #008000">'</span><span style="COLOR: #008000">&nbsp;Set&nbsp;the&nbsp;revision&nbsp;for&nbsp;the&nbsp;application</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>'</span><span style="COLOR: #008000">&nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">'</span><span style="COLOR: #008000">&nbsp;Get&nbsp;File&nbsp;path</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">scriptName&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;wscript.scriptfullname<br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>scriptPath&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">Left</span><span style="COLOR: #000000">(scriptName,&nbsp;</span><span style="COLOR: #0000ff">instrRev</span><span style="COLOR: #000000">(scriptName,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">))<br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">'</span><span style="COLOR: #008000">&nbsp;create&nbsp;svn&nbsp;object&nbsp;and&nbsp;get&nbsp;the&nbsp;last&nbsp;revision</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">Set</span><span style="COLOR: #000000">&nbsp;svnObj&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">CreateObject</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">SubWCRev.object</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>svnObj.GetWCInfo&nbsp;scriptPath,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>versionDes&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Revision:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;svnObj.Revision&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">.&nbsp;Date:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;svnObj.Date<br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">'</span><span style="COLOR: #008000">&nbsp;update&nbsp;the&nbsp;version.h&nbsp;with&nbsp;the&nbsp;lastest&nbsp;version</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">14</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">Set</span><span style="COLOR: #000000">&nbsp;fs&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">CreateObject</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Scripting.FileSystemObject</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>scriptPath&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">Left</span><span style="COLOR: #000000">(scriptPath,&nbsp;</span><span style="COLOR: #0000ff">Len</span><span style="COLOR: #000000">(scriptPath)&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>slnPath&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">Left</span><span style="COLOR: #000000">(scriptName,&nbsp;</span><span style="COLOR: #0000ff">instrRev</span><span style="COLOR: #000000">(scriptPath,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">))<br></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>versionFullName&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;slnPath&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Version.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">'</span><span style="COLOR: #008000">&nbsp;check&nbsp;file&nbsp;valid</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">20</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">If</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">Not</span><span style="COLOR: #000000">&nbsp;fs.fileexists(versionFullName)&nbsp;</span><span style="COLOR: #0000ff">Then</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">MsgBox</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">The&nbsp;file&nbsp;version.h&nbsp;does&nbsp;not&nbsp;exists.</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;wscript.quit<br></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">End</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">If</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">25</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">'</span><span style="COLOR: #008000">&nbsp;read&nbsp;content&nbsp;from&nbsp;the&nbsp;file</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">26</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">Set</span><span style="COLOR: #000000">&nbsp;fRead&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;fs.OpenTextFile(versionFullName,&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">27</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>fContent&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;fRead.ReadAll<br></span><span style="COLOR: #008080">28</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>fRead.close<br></span><span style="COLOR: #008080">29</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">30</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">'</span><span style="COLOR: #008000">&nbsp;modify&nbsp;the&nbsp;revision&nbsp;value</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">31</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">Set</span><span style="COLOR: #000000">&nbsp;regEx&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">New</span><span style="COLOR: #000000">&nbsp;RegExp<br></span><span style="COLOR: #008080">32</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>regEx.Pattern&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">#define\s+SHADOW_REVISION\s+""(.*)""</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">33</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">Set</span><span style="COLOR: #000000">&nbsp;Matches&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;regEx.Execute(fContent)<br></span><span style="COLOR: #008080">34</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">For</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">Each</span><span style="COLOR: #000000">&nbsp;Match&nbsp;in&nbsp;Matches&nbsp;&nbsp;<br></span><span style="COLOR: #008080">35</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RetStr&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;RetStr&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Match&nbsp;found&nbsp;at&nbsp;position&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">36</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RetStr&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;RetStr&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;Match.FirstIndex&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">.&nbsp;Match&nbsp;Value&nbsp;is&nbsp;'</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">37</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RetStr&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;RetStr&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;Match.Value&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">'.</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;vbCRLF<br></span><span style="COLOR: #008080">38</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">If</span><span style="COLOR: #000000">&nbsp;Match.submatches(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;versionDes&nbsp;</span><span style="COLOR: #0000ff">Then</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">39</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">MsgBox</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">The&nbsp;revision&nbsp;is&nbsp;already&nbsp;lastest</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">40</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wscript.quit<br></span><span style="COLOR: #008080">41</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">End</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">If</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">42</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">Next</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">43</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>fContent&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;regEx.Replace(fContent,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">#define&nbsp;SHADOW_REVISION&nbsp;""</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;versionDes&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">""</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">44</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">45</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">'</span><span style="COLOR: #008000">&nbsp;Write&nbsp;to&nbsp;version.h</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">46</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">Set</span><span style="COLOR: #000000">&nbsp;fWrite&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;fs.OpenTextFile(versionFullName,&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">47</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>fWrite.Write&nbsp;fContent<br></span><span style="COLOR: #008080">48</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>fwrite.close<br></span><span style="COLOR: #008080">49</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">MsgBox</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Update&nbsp;the&nbsp;revision&nbsp;successful</span><span style="COLOR: #000000">"</span></div>
<br>可以看出实现起来比较麻烦。<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"><span style="COLOR: #008080">&nbsp;1</span><img id=Codehighlighter1_0_117_Open_Image onclick="this.style.display='none'; Codehighlighter1_0_117_Open_Text.style.display='none'; Codehighlighter1_0_117_Closed_Image.style.display='inline'; Codehighlighter1_0_117_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_0_117_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_0_117_Closed_Text.style.display='none'; Codehighlighter1_0_117_Open_Image.style.display='inline'; Codehighlighter1_0_117_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top><span id=Codehighlighter1_0_117_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">/**/</span><span id=Codehighlighter1_0_117_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Substitution&nbsp;keyword&nbsp;file&nbsp;for&nbsp;SubWCRev&nbsp;(part&nbsp;of&nbsp;Tortoise&nbsp;SVN),&nbsp;to&nbsp;autochange&nbsp;version&nbsp;number&nbsp;with&nbsp;SVN&nbsp;Rev&nbsp;number<br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top></span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#pragma&nbsp;once<br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;&nbsp;_ProductVersion&nbsp;"3.0.0.1"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;&nbsp;_FileVersion&nbsp;"3.2.0.$WCREV$";</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;&nbsp;_Revision&nbsp;&nbsp;"$WCREV$";</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;&nbsp;_Modified&nbsp;&nbsp;"$WCMODS?Modified:Not&nbsp;modified$";</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;&nbsp;_Date&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"$WCDATE$";</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;&nbsp;_Range&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"$WCRANGE$";</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;&nbsp;_Mixed&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"$WCMIXED?Mixed&nbsp;revision&nbsp;WC:Not&nbsp;mixed$";</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;&nbsp;_URL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"$WCURL$";</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;&nbsp;_ProductName&nbsp;&nbsp;"Software&nbsp;1.0"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;&nbsp;_CompanyName&nbsp;&nbsp;&nbsp;"Company"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;&nbsp;_FileDescription&nbsp;"SoftWare&nbsp;module"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;&nbsp;_LegalCopyright&nbsp;"Company,&nbsp;All&nbsp;rights&nbsp;reserved."</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;&nbsp;_FileVersion_0&nbsp;&nbsp;3</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;&nbsp;_FileVersion_1&nbsp;&nbsp;2</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;&nbsp;_FileVersion_2&nbsp;&nbsp;0</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;&nbsp;_FileVersion_3&nbsp;&nbsp;$WCREV$</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;&nbsp;_ProductVersion_0&nbsp;&nbsp;3</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">25</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;&nbsp;_ProductVersion_1&nbsp;&nbsp;2</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">26</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;&nbsp;_ProductVersion_2&nbsp;&nbsp;0</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">27</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;&nbsp;_ProductVersion_3&nbsp;&nbsp;1</span></div>
<p>在打包时运行如下的批处理文件就会自动生成或者更新version.h<br>SubWCRev.exe ..\ SubWCRev.txt ..\version.h</p>
<p>pause</p>
资源文件还是引用version.h定义好的常量。这种方式就很简单，而且不易出错。上面介绍C++方面的版本跟踪，在C#中则是先制定AssemblyInfo.cs的一个模板，在打包时用上面的命令去更新AssemblyInfo.cs。
<img src ="http://www.cppblog.com/Robertxiao/aggbug/80924.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Robertxiao/" target="_blank">Robertxiao</a> 2009-04-24 10:45 <a href="http://www.cppblog.com/Robertxiao/archive/2009/04/24/80924.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>删除文件夹下指定类型的文件</title><link>http://www.cppblog.com/Robertxiao/archive/2009/03/04/75495.html</link><dc:creator>Robertxiao</dc:creator><author>Robertxiao</author><pubDate>Wed, 04 Mar 2009 04:04:00 GMT</pubDate><guid>http://www.cppblog.com/Robertxiao/archive/2009/03/04/75495.html</guid><wfw:comment>http://www.cppblog.com/Robertxiao/comments/75495.html</wfw:comment><comments>http://www.cppblog.com/Robertxiao/archive/2009/03/04/75495.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Robertxiao/comments/commentRss/75495.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Robertxiao/services/trackbacks/75495.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;昨日，我的一个分区报告磁盘容量低。这个分区我是专门用来存储例子及项目，经过分析发现是因为太多的例子程序编译后产生的dll, exe, ncb文件占据了大量的空间，而代码文件占用的空间并不是很多。只有去删除这些生成的文件了。但经过长久的使用，积累了大大小小有数百个小例子，要删除每个例子的这些文件是一件很枯燥繁重的重复工作。删了5个搞得人都有些晕了。后来想想为什么不用程序来做这件事了。于是我就写了段脚本来处理这项工作了。效果还不错。<br><br><span style="COLOR: #3366ff">mydir = "E:\klfd"&nbsp; ' 指定要删除哪个目录下的文件<br>specifyExt = "exe,dll,ilk,pdb,obj,exp,lib,pch,res,dep,idb,manifest"&nbsp; '指定要删除的文件类型，可千万不要用* 哦<br>extArr = split(specifyExt, ",")<br>Set fs = CreateObject("scripting.filesystemobject")<br>Set rootFolder = fs.getfolder(mydir)<br>DeleteFile rootFolder<br>MsgBox "Delete complete"</span></p>
<p style="COLOR: #3366ff">Sub DeleteFile(myfolder)<br>On Error Resume Next<br>&nbsp;Set subfolders = myfolder.Subfolders<br>&nbsp;For Each Subfolder in subfolders<br>&nbsp;&nbsp;DeleteFile subfolder<br>&nbsp;Next</p>
<p style="COLOR: #3366ff">&nbsp;For Each strExt in extArr<br>&nbsp;&nbsp;strTemp = myfolder.path &amp; "\*." &amp; strExt<br>&nbsp;&nbsp;fs.deletefile strTemp, True<br>&nbsp;Next<br>&nbsp;'For each myfile in myfolder.files&nbsp;<br>&nbsp;'&nbsp;strFileExt = LCase(fs.getextensionname(myfile.name))<br>&nbsp;'&nbsp;For each strExt in extArr<br>&nbsp;'&nbsp;If strExt = strFileExt Then<br>&nbsp;'&nbsp;&nbsp;&nbsp;fs.deletefile myfile.path, True<br>&nbsp;'&nbsp;&nbsp;End If<br>&nbsp;'&nbsp;Next&nbsp;&nbsp;<br>&nbsp;'Next<br>End Sub</p>
<img src ="http://www.cppblog.com/Robertxiao/aggbug/75495.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Robertxiao/" target="_blank">Robertxiao</a> 2009-03-04 12:04 <a href="http://www.cppblog.com/Robertxiao/archive/2009/03/04/75495.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>搭建Vbscript脚本开发环境</title><link>http://www.cppblog.com/Robertxiao/archive/2009/02/23/74656.html</link><dc:creator>Robertxiao</dc:creator><author>Robertxiao</author><pubDate>Mon, 23 Feb 2009 02:59:00 GMT</pubDate><guid>http://www.cppblog.com/Robertxiao/archive/2009/02/23/74656.html</guid><wfw:comment>http://www.cppblog.com/Robertxiao/comments/74656.html</wfw:comment><comments>http://www.cppblog.com/Robertxiao/archive/2009/02/23/74656.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Robertxiao/comments/commentRss/74656.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Robertxiao/services/trackbacks/74656.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;<span style="FONT-SIZE: 18pt">&nbsp;&nbsp;添加新建Vbscript 文件的快捷菜单</span><br><br><span style="COLOR: #3366ff">filetype = ".vbs"<br>set WSHShell = CreateObject("WScript.Shell")<br>prg = ReadReg("HKCR\" &amp; filetype &amp; "\")<br>prgname = ReadReg("HKCR\" &amp; prg &amp; "\")<br>ask = "what shoud be the name for new VBScript scripts?"<br>title = "New menu entry"<br>prgname = InputBox(ask, title, prgname)<br>WSHShell.RegWrite "HKCR\" &amp; prg &amp; "\",prgname<br>WSHShell.RegWrite "HKCR\" &amp; filetype &amp; "\ShellNew\NullFile", ""<br>function ReadReg(key)<br>&nbsp;&nbsp;on error resume next<br>&nbsp;&nbsp;ReadReg = WSHShell.RegRead(key)<br>&nbsp;&nbsp;if err.Number &gt; 0 then<br>&nbsp;&nbsp;&nbsp;error = "Error: Registry-key""" &amp; key &amp; """ could not be found!"<br>&nbsp;&nbsp;&nbsp;msgbox error, vbCritical<br>&nbsp;&nbsp;&nbsp;WScript.Quit<br>&nbsp;&nbsp;end if<br>end function</span><br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="FONT-SIZE: 18pt">创建Vbscript调试快捷菜单<br></span><br><span style="COLOR: #3366ff">Set wshshell = CreateObject("wscript.shell")<br>vbsfile = wshshell.regread("HKCR\.vbs\")<br>master = "HKCR\" &amp; vbsfile &amp; "\shell\"<br>wshshell.regwrite master &amp; "debug\", "&amp;Debug"<br>wshshell.regwrite master &amp; "debug\command\", "wscript.exe //x ""%L"""<br>wshshell.regwrite master &amp; "check\", "&amp;Monitor"<br>wshshell.regwrite master &amp; "check\command\", "wscript.exe //D ""%L"""<br>MsgBox "Debugging Command Setup Successful"<br></span><br><span style="FONT-SIZE: 18pt; COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;写私有日志</span><br><br><span style="COLOR: #3366ff">Set wshshell = CreateObject("wscript.shell")<br>Set fs = CreateObject("Scripting.FileSystemObject")<br>windir = wshshell.ExpandEnvironmentStrings("%WINDIR%")<br>logfile = windir &amp; "\wsh.log"<br>debugging = True<br>LogIt "Script has started."<br>LogIt "Loop is entered."<br>For x = 1 To 10<br>&nbsp;LogIt "Variable x:" &amp; x<br>Next<br>LogIt "Loop is done."<br>MsgBox "done!"<br>LogIt "Script is done."</span></p>
<p><span style="COLOR: #3366ff">Sub LogIt(text)<br>&nbsp;If Not debugging Then Exit Sub<br>&nbsp;Set output = fs.OpenTextFile(logfile, 8, True, -2)<br>&nbsp;output.writeLine Now() &amp; vbTab &amp; "Information: " &amp; text<br>&nbsp;output.close<br>End Sub</span></p>
<br>声明：上述内容来源脚本编程的相关书中。
<img src ="http://www.cppblog.com/Robertxiao/aggbug/74656.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Robertxiao/" target="_blank">Robertxiao</a> 2009-02-23 10:59 <a href="http://www.cppblog.com/Robertxiao/archive/2009/02/23/74656.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>为新建PERL文件添加菜单项</title><link>http://www.cppblog.com/Robertxiao/archive/2009/02/22/74609.html</link><dc:creator>Robertxiao</dc:creator><author>Robertxiao</author><pubDate>Sun, 22 Feb 2009 13:49:00 GMT</pubDate><guid>http://www.cppblog.com/Robertxiao/archive/2009/02/22/74609.html</guid><wfw:comment>http://www.cppblog.com/Robertxiao/comments/74609.html</wfw:comment><comments>http://www.cppblog.com/Robertxiao/archive/2009/02/22/74609.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Robertxiao/comments/commentRss/74609.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Robertxiao/services/trackbacks/74609.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在使用WINDOWS 操作系统，我们可以很方便地在桌面上及浏览器的文件夹中快速建立txt格式的文件。如果系统中还安装了OFFICE中的应用软件，我们也可以很方便快速地建立对格式的文件。在空白处按鼠标右键，在弹出菜单的新建子菜单中单击相应的格式就可以非常快捷地建立一个新文件。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;最近在学Perl语言。我每次写一个小小的Perl程序，我都是新建一个文本文件，然后重命名该文本文件。这个过程很容易，但是非常乏味。当练习要建立许多Perl小文件时，我实在不能再忍受这种重复乏味的工作。我希望建立一个.pl文件能象.txt文件一样快捷。经过研究注册表并经过试验，只要在HKCR\.pl\Perl\ShellNew的键中新建一个字符串项NullFile并赋空值给它就可以了。我们可以直接修改注册表，当然我们也可以采用程序的方式来实现。在这里我给出一小段利用脚本来实现的代码供大家参考。<br><br><span style="COLOR: #0000ff; BACKGROUND-COLOR: #ffffff">&nbsp;&nbsp; set wshell = createobject("wscript.shell")<br>&nbsp;&nbsp;&nbsp;wshell.regwrite "HKCR\.pl\Perl\shellnew\NullFile", ""</span><br></p>
<img src ="http://www.cppblog.com/Robertxiao/aggbug/74609.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Robertxiao/" target="_blank">Robertxiao</a> 2009-02-22 21:49 <a href="http://www.cppblog.com/Robertxiao/archive/2009/02/22/74609.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Talk about user account control</title><link>http://www.cppblog.com/Robertxiao/archive/2008/09/19/62245.html</link><dc:creator>Robertxiao</dc:creator><author>Robertxiao</author><pubDate>Fri, 19 Sep 2008 01:50:00 GMT</pubDate><guid>http://www.cppblog.com/Robertxiao/archive/2008/09/19/62245.html</guid><wfw:comment>http://www.cppblog.com/Robertxiao/comments/62245.html</wfw:comment><comments>http://www.cppblog.com/Robertxiao/archive/2008/09/19/62245.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Robertxiao/comments/commentRss/62245.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Robertxiao/services/trackbacks/62245.html</trackback:ping><description><![CDATA[&nbsp;
<p><span style="FONT-SIZE: 14pt">Introduction</span></p>
<p><span>Microsoft corporation is proud of user account control</span><span>。</span><span>It provides maximum protect ability for computer</span><span>。</span><span>It is very useful for beginner and generally users</span><span>，</span><span>but people that has experience is very unsuitable</span><span>。</span><span>Especially program developer</span><span>，</span><span>When we debug our program</span><span>，</span><span>some access reject</span><span>。</span></p>
<p><span>We must run the executable file without debug under administrator</span><span>。</span><span>At Last I can not bear it</span><span>。</span><span>And I disable it</span><span>。</span></p>
<p>&nbsp;</p>
<p><span style="FONT-SIZE: 14pt">Method</span></p>
<p><span><span>&nbsp;&nbsp; </span>Open Control panel and go into &#8220;user account and family safety&#8221;</span><span>。</span><span>Click Change your windows password&nbsp;linkbutton</span><span>。</span><span>Now at end of row is &#8220;Turn user Account Control on or off&#8221;.</span></p>
<p><span><span>&nbsp;&nbsp; </span>Run msconfig.exe. and open the tools tab page. Here provide tool to disable and enable user account control.</span></p>
<p><span><span>&nbsp;&nbsp; </span>Okay.We can change the pattern now. change it and restart computer. The annoying pop dialog about the permission go away. Oh the Sky is blue back.</span></p>
<p>&nbsp;</p>
<p><span><span>&nbsp;&nbsp; </span>Above I resolve the debug trouble. But I can not be sure that the client hate this control yet. Before We release our program, we should configure the project property to request the administrator right. </span></p>
<p><span><span>&nbsp;&nbsp; </span>If we work under Vs2008 environment. Open the project property page,configuration properties-&gt;linker-&gt;manifest file. Here you can configurate it.</span></p>
<p><span><span>&nbsp;&nbsp; </span>If we work under VS2005 environment. It is difficult to configuate. Follow me.</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Add a xml document which comment like:</span></p>
<p align=left><span>&lt;?</span><span>xml</span><span> </span><span>version</span><span>=</span><span>"<span>1.0</span>"<span> </span><span>encoding</span><span>=</span>"<span>UTF-8</span>"<span> </span><span>standalone</span><span>=</span>"<span>yes</span>"<span>?&gt;</span></span></p>
<p align=left><span>&lt;</span><span>assembly</span><span> </span><span>xmlns</span><span>=</span><span>"<span>urn:schemas-microsoft-com:asm.v1</span>"<span> </span><span>manifestVersion</span><span>=</span>"<span>1.0</span>"<span>&gt;</span></span></p>
<p align=left><span>&nbsp;&lt;</span><span>trustInfo</span><span> </span><span>xmlns</span><span>=</span><span>"<span>urn:schemas-microsoft-com:asm.v3</span>"<span>&gt;</span></span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span>&lt;</span><span>security</span><span>&gt;</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;</span><span>requestedPrivileges</span><span>&gt;</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;</span><span>requestedExecutionLevel</span><span> </span><span>level</span><span>=</span><span>"<span>requireAdministrator</span>"<span> </span><span>uiAccess</span><span>=</span>"<span>false</span>"<span>&gt;&lt;/</span><span>requestedExecutionLevel</span><span>&gt;</span></span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/</span><span>requestedPrivileges</span><span>&gt;</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span>&lt;/</span><span>security</span><span>&gt;</span></p>
<p align=left><span>&nbsp;&lt;/</span><span>trustInfo</span><span>&gt;</span></p>
<p align=left><span>&nbsp;&lt;</span><span>dependency</span><span>&gt;</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span>&lt;</span><span>dependentAssembly</span><span>&gt;</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;</span><span>assemblyIdentity</span><span> </span><span>type</span><span>=</span><span>"<span>win32</span>"<span> </span><span>name</span><span>=</span>"<span>Microsoft.VC90.DebugCRT</span>"<span> </span><span>version</span><span>=</span>"<span>9.0.21022.8</span>"<span> </span><span>processorArchitecture</span><span>=</span>"<span>x86</span>"<span> </span><span>publicKeyToken</span><span>=</span>"<span>1fc8b3b9a1e18e3b</span>"<span>&gt;&lt;/</span><span>assemblyIdentity</span><span>&gt;</span></span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span>&lt;/</span><span>dependentAssembly</span><span>&gt;</span></p>
<p align=left><span>&nbsp;&lt;/</span><span>dependency</span><span>&gt;</span></p>
<p><span>&lt;/</span><span>assembly</span><span>&gt;</span></p>
<p><span>This document must is&nbsp; a embedded resource. And in property page specify this&nbsp; file as additional manifest file. &nbsp;build your program.</span></p>
<p>&nbsp;</p>
<p><span style="FONT-SIZE: 14pt">At end</span></p>
<img src ="http://www.cppblog.com/Robertxiao/aggbug/62245.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Robertxiao/" target="_blank">Robertxiao</a> 2008-09-19 09:50 <a href="http://www.cppblog.com/Robertxiao/archive/2008/09/19/62245.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>从Excel转成SQL&lt;2&gt;</title><link>http://www.cppblog.com/Robertxiao/archive/2008/03/28/45287.html</link><dc:creator>Robertxiao</dc:creator><author>Robertxiao</author><pubDate>Fri, 28 Mar 2008 14:46:00 GMT</pubDate><guid>http://www.cppblog.com/Robertxiao/archive/2008/03/28/45287.html</guid><wfw:comment>http://www.cppblog.com/Robertxiao/comments/45287.html</wfw:comment><comments>http://www.cppblog.com/Robertxiao/archive/2008/03/28/45287.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Robertxiao/comments/commentRss/45287.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Robertxiao/services/trackbacks/45287.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在上篇文章我们生成了具有明确含义标准的XML，有了这样的XML要生成SQL就很容易。象我这样构建出相关的类之后，只要有涉及到引用时只要继承SQLRECORD这个类，并重写它的GetSqlValue方法。而后根据名称取得你对应的SQL生成器就行了。我相信即使还有许多要导入的EXCEL我也不怕了。那时我一个上午就完成了四张全都有引...&nbsp;&nbsp;<a href='http://www.cppblog.com/Robertxiao/archive/2008/03/28/45287.html'>阅读全文</a><img src ="http://www.cppblog.com/Robertxiao/aggbug/45287.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Robertxiao/" target="_blank">Robertxiao</a> 2008-03-28 22:46 <a href="http://www.cppblog.com/Robertxiao/archive/2008/03/28/45287.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>把Execl转成SQL &lt;1&gt;</title><link>http://www.cppblog.com/Robertxiao/archive/2008/03/26/45286.html</link><dc:creator>Robertxiao</dc:creator><author>Robertxiao</author><pubDate>Wed, 26 Mar 2008 11:21:00 GMT</pubDate><guid>http://www.cppblog.com/Robertxiao/archive/2008/03/26/45286.html</guid><wfw:comment>http://www.cppblog.com/Robertxiao/comments/45286.html</wfw:comment><comments>http://www.cppblog.com/Robertxiao/archive/2008/03/26/45286.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Robertxiao/comments/commentRss/45286.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Robertxiao/services/trackbacks/45286.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;前段时间，受命写出一个把客户提交的的电子数据资料(大部份是excel,也可以是word,access等)转成标准的SQL语句。以初始化数据库，保护客户现有的资料，减轻客户的负担。原来也有过这样的转化工作，本想拿来就用，具体看了之后才发现不可能，无奈之际只有自己实现一个这样的导入设计，目标是减轻以后的导入工作。&nbsp;&nb...&nbsp;&nbsp;<a href='http://www.cppblog.com/Robertxiao/archive/2008/03/26/45286.html'>阅读全文</a><img src ="http://www.cppblog.com/Robertxiao/aggbug/45286.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Robertxiao/" target="_blank">Robertxiao</a> 2008-03-26 19:21 <a href="http://www.cppblog.com/Robertxiao/archive/2008/03/26/45286.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>个人软件过程小宣言</title><link>http://www.cppblog.com/Robertxiao/archive/2007/12/02/37650.html</link><dc:creator>Robertxiao</dc:creator><author>Robertxiao</author><pubDate>Sun, 02 Dec 2007 13:17:00 GMT</pubDate><guid>http://www.cppblog.com/Robertxiao/archive/2007/12/02/37650.html</guid><wfw:comment>http://www.cppblog.com/Robertxiao/comments/37650.html</wfw:comment><comments>http://www.cppblog.com/Robertxiao/archive/2007/12/02/37650.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Robertxiao/comments/commentRss/37650.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Robertxiao/services/trackbacks/37650.html</trackback:ping><description><![CDATA[现在的软件越来越宠大、应用越来越丰富、应用逻辑也越来越复杂。不象最初的软件开只依靠个人的技巧来完成的。为了解决软件危机，有许多专家和组织也提出了相应的方法论。身为程序员我又应如何来提高我的软件开发能力呢？<br><br>1：采用合适的技术<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 程序员大凡都是聪明的人，至少在抽象思维方面是比较强的。这也决定了我们这些程序员大都有一种追求技术的好斗心。当然有这个好斗心是好的，这是我们得以不断追赶日新月异技术的源动力。但是在开发项目时我们应只能采用合适的技术，因为我们的项目有商业目的。我们不能为了一个小小项目而搬出EJB、DCOM等高深的技术来。也不能因为一时的项目时间吃紧而放弃应有的技术。<br><br>2：利用可复用的资源<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我总是对别人写的代码抱以审视的态度，总会以为别的代码里有着BUG或者他的模块里有着某种机关。我总想试图自已从无到有地搭建所有的模块。有时甚至怀疑MICROSOFT在MFC这个框架里放入了储如什么&#8220;窃听器&#8221;，我变得很糟糕。一个生产飞机的公司得要从零开始地生产每一个零件了，这确实是很有趣。我们会发现公司会很快进入一个&#8220;疲惫&#8221;的状态。当然生产飞机的公司不会这样做，他会采购有质量保证的零件，为什么我们不这样做呢？当然我们也要对将要采用的资源给以质量验证了。<br><br>3：画出你的意图<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 蜜蜂建筑的蜂巢漂亮极了，连最伟大的建筑师也不得不如是说。但是它的建巢行为并没有任何的图纸、规划，它们完全凭着本能，是不是我们的&#8220;这种艺术行为&#8221;（我在这里这样说，但实际上别人并不会这样认为的）也不需要图纸、规划呢？的确是，不过前提是你必须一出生就会写漂亮代码了（那是你的一种本能）。别以为画图纸、规划乱费了你的时间。看看指南针再走路，是不是等你走出森林才发现走错了方向更好。<br><br>4：提高沟通、协作能力<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;软件开发是一个集体的劳动，至少现在的大多数商业软件不再是单枪匹马地完成的。就算是一个人完成的软件那么这个程序员也会有他的上司。我们应在一个愉快的环境中工作，这样我们的艺术细胞才能跳动起来，灵感才能冒出来。又有谁愿意在一个郁闷的环境中工作呢？一句意思相同的话，用两个句子表达的作用是可能完全不同。我们要跟同事进行良好沟通以最快速度来完成工作，我们要跟上司良好的沟通以取得支持。我要提高自己的沟通、协作能力。<br><br>5：持续学习<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 软件开发技术在飞速地变化，身在这个浪潮中的我们只有不断地学习。不学习就等于倒退，再说就算不倒退。我相信在我所专的这个领域里我还是有太多的未知，为什么我不在空闲时去探索它呢？学海无涯，但我们不一定是苦作舟呀，如果你对此已不感兴趣或者是讨厌了，我建议是马上退出去做别的。因为这世上赚钱的法子还很多。<br><br>6：测试自己的模块<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;不要以为测试是测试员的事，我们要对自己做出的模块有质量的保证，我们也可以籍此来验证自己的思路、发现自己某处的缺陷。这样我们就在总结着经验，一些从&#8220;错误&#8221;中发掘出来的错误更加宝贵，因为这些都是经过实践洗礼。就像电视里经过越战的战士比较历害一样。<br><br>7：写出良好的注释<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我阅过很多的项目代码，我发现大师级的模块里总是有很多良好的注释，相反有一些有点功底的人他们的代码里的注释相当少，有的根本没有。现在的很多集成环境能够自动地从我们的注释中生成文档，有这样的支持，我们为什么还吝啬我们的注释呢？<br><br><br>
<img src ="http://www.cppblog.com/Robertxiao/aggbug/37650.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Robertxiao/" target="_blank">Robertxiao</a> 2007-12-02 21:17 <a href="http://www.cppblog.com/Robertxiao/archive/2007/12/02/37650.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>json 之我见</title><link>http://www.cppblog.com/Robertxiao/archive/2007/11/27/37397.html</link><dc:creator>Robertxiao</dc:creator><author>Robertxiao</author><pubDate>Tue, 27 Nov 2007 12:36:00 GMT</pubDate><guid>http://www.cppblog.com/Robertxiao/archive/2007/11/27/37397.html</guid><wfw:comment>http://www.cppblog.com/Robertxiao/comments/37397.html</wfw:comment><comments>http://www.cppblog.com/Robertxiao/archive/2007/11/27/37397.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Robertxiao/comments/commentRss/37397.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Robertxiao/services/trackbacks/37397.html</trackback:ping><description><![CDATA[JSON是JavaScript Object Notation这几个单词的缩写。<br><br>JSON:是一种轻量级的数据交换格式。易于人们的阅读、理解及编写。同时也易于机器的解析和生成，这是一种文本格式。这是一种在多语言之间交换数据的理想语言。<br><br>JSON主要有两种结构：<br>1：名称/值对，有点像字典、哈希表等。如下这种表示。<br>"Name":"zhang","Birthday":"2007-8-9"<br>2：值的有序列表，类似于数据的表示方式。如下表示。<br>"zhang","li","zhao"<br><br>下面我用Javascript来描述一下JSON的表现形式<br>对象的表示形式：<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: #0000ff">function</span><span style="COLOR: #000000">&nbsp;employee()<br><img id=Codehighlighter1_20_73_Open_Image onclick="this.style.display='none'; Codehighlighter1_20_73_Open_Text.style.display='none'; Codehighlighter1_20_73_Closed_Image.style.display='inline'; Codehighlighter1_20_73_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_20_73_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_20_73_Closed_Text.style.display='none'; Codehighlighter1_20_73_Open_Image.style.display='inline'; Codehighlighter1_20_73_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_20_73_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_20_73_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.Name</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">zhang</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.Birthday</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">2007-8-9</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;em</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;emplyee();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;str</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">em.toJSONString();<br><img id=Codehighlighter1_124_245_Open_Image onclick="this.style.display='none'; Codehighlighter1_124_245_Open_Text.style.display='none'; Codehighlighter1_124_245_Closed_Image.style.display='inline'; Codehighlighter1_124_245_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_124_245_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_124_245_Closed_Text.style.display='none'; Codehighlighter1_124_245_Open_Image.style.display='inline'; Codehighlighter1_124_245_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_124_245_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">/**/</span><span id=Codehighlighter1_124_245_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">************************************<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>*str={"Name":"zhang"}会是这个样子<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>*&nbsp;以{&nbsp;}括住的名称/值对<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>*<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>************************************</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<br>值的表示形式：<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: #0000ff">var</span><span style="COLOR: #000000">&nbsp;str</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">zhang</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">67</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;strJS</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">str.toJSONSting();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;iJS</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">i.toJSONString();<br><img id=Codehighlighter1_82_158_Open_Image onclick="this.style.display='none'; Codehighlighter1_82_158_Open_Text.style.display='none'; Codehighlighter1_82_158_Closed_Image.style.display='inline'; Codehighlighter1_82_158_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_82_158_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_82_158_Closed_Text.style.display='none'; Codehighlighter1_82_158_Open_Image.style.display='inline'; Codehighlighter1_82_158_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_82_158_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">/**/</span><span id=Codehighlighter1_82_158_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">***********************<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>*strJS&nbsp;"zhang"<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>*iJS=67<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>*<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>************************</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<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: #0000ff">var</span><span style="COLOR: #000000">&nbsp;arr</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Array();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>arr.push(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">a</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>arr.push(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">b</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>arr.push(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">c</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>arr.push(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;arrJS</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">arr.toJSONString();<br><img id=Codehighlighter1_111_226_Open_Image onclick="this.style.display='none'; Codehighlighter1_111_226_Open_Text.style.display='none'; Codehighlighter1_111_226_Closed_Image.style.display='inline'; Codehighlighter1_111_226_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_111_226_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_111_226_Closed_Text.style.display='none'; Codehighlighter1_111_226_Open_Image.style.display='inline'; Codehighlighter1_111_226_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_111_226_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">/**/</span><span id=Codehighlighter1_111_226_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">**********************************<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>*arrJS&nbsp;:["a","b","c","d"]<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>*是以&nbsp;[&nbsp;]括住的值或者对象。<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>***********************************</span></div>
</span><br>对于以上的内容，大家可以从<a href="http://www.json.org/">www.json.org</a>中得到更多的帮助。我上面介绍的只是为了我记录的一些用法作基础。今天先写到这里。<br><br><br><br><br>
<img src ="http://www.cppblog.com/Robertxiao/aggbug/37397.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Robertxiao/" target="_blank">Robertxiao</a> 2007-11-27 20:36 <a href="http://www.cppblog.com/Robertxiao/archive/2007/11/27/37397.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>XmlDom  用法小谈</title><link>http://www.cppblog.com/Robertxiao/archive/2007/11/09/36231.html</link><dc:creator>Robertxiao</dc:creator><author>Robertxiao</author><pubDate>Fri, 09 Nov 2007 09:17:00 GMT</pubDate><guid>http://www.cppblog.com/Robertxiao/archive/2007/11/09/36231.html</guid><wfw:comment>http://www.cppblog.com/Robertxiao/comments/36231.html</wfw:comment><comments>http://www.cppblog.com/Robertxiao/archive/2007/11/09/36231.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Robertxiao/comments/commentRss/36231.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Robertxiao/services/trackbacks/36231.html</trackback:ping><description><![CDATA[XmlDOM&nbsp; 用法小谈<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 今天，我觉得自己的情绪不够好，我看他们的设计太不考虑性能方面的问题。而一味地讲究不要冗余，是啊教科书上也老是说数据库的设计要达到什么样的标准。我个人却老是觉得对适当地用冗余能换来大的性能提升是很有帮助的。我这个人过于死板了些吧？所以把这种情绪带进了工作，觉得很是不该。开篇写了题外话。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 前两天我设计了一个页面,这是一个多级联动的页面，当选了项目后，项目后面的单元格中的下拉框中出现与这个项目对应的方法，方法过后则是出现仪器，项目还联动着标准。当初考虑性能上的问题我在这个页面中采用了AJAX（AjaxPro)技术,经过使用发现了其中的一个很严重的错误（程序员爱把它称为BUG，但我认为没有满足要求的就是错误）。当点了一单元格时，会异步回到服务端拿数据，而在这期间用户是可以点其它的地方，这时候返回来的数据只会写在当前活动的单元格中，但这时活动的单元格却早已不是源目标了。所以出现了这个难以忍受的错误。我们不能要求或者假设用户不以很快的类似玩游戏的速度来操作MOUSE。所以我的这个设计构想是错误的。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 鉴于上面的原因，我决定对页面做如下的修改。在载入页之初，就通过服务端预期地把这个数据组强成XML文件放到页面上去，而页面单击找数据也就在客户端可以完成。这样就会大提高反应的速试了，也不会出现前面说的在这个异步的过程中客户的操作而引发错误。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在服务端的工作（这是C#做的）：我先把数据组织成XML文件，进而把它放在页面上。在服务端我采用了XmlWritter这个类。用法如下<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">StringBuilder&nbsp;sb</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;StringBuilder();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XmlWriterSettings&nbsp;settings&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;XmlWriterSettings();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;settings.Indent&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;settings.OmitXmlDeclaration&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;settings.NewLineOnAttributes&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_writer&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;XmlWriter.Create(sb,settings);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>_writer.WriteStartDocument();</span></div>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在上面我们就构造好了XML写入器了。而在以下就只要调用下面几个方法就可以了。<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 14pt; 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">_writer.WriteStartElement(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">ITEMS</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>_writer.WriteStartElement(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">ITEM</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>_writer.WriteAttributeString(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">ID</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>_writer.WriteAttributeString(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Name</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">PH</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>_writer.WriteEndElement();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>_writer.WriteFullEndElement()<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: #000000">//</span><span style="COLOR: #000000">产生出来的样子<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">ITEMS</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">ITEM&nbsp;ID</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;Name</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">PH</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">/&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">ITEMS</span><span style="COLOR: #000000">&gt;</span></div>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;好了上面的代码可以让我产生出一个XML来了。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 上面准备好服务端，现在我得开始客户端了。这里我用到了IE浏览器中的XMLDOM这个组件了，在别的浏览器中也有另处的DOM组件的，其操作和语法甚至函数上都有很大相同的了。<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>xmlDom=new&nbsp;ActiveXObject("MSXML2.DOMDocument");<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>xmlDom.loadXML(strXml);//这是一个字符串<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>var&nbsp;root=xmlDom.selectSingleNode("ITEMS");<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>var&nbsp;items=root.selectNodes("ITEM");//找ROOT下所有的ITEM子节点。<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>var&nbsp;item=root.selectSingleNode("ITEM[@id=10]");//则是找其下一个ITEM其ID属性为10了。<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>关于XQL的语法，我在有空时会以一个短文来说一说的了。</div>
<img src ="http://www.cppblog.com/Robertxiao/aggbug/36231.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Robertxiao/" target="_blank">Robertxiao</a> 2007-11-09 17:17 <a href="http://www.cppblog.com/Robertxiao/archive/2007/11/09/36231.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>RUP 统一软件开发过程 小谈</title><link>http://www.cppblog.com/Robertxiao/archive/2007/11/08/36130.html</link><dc:creator>Robertxiao</dc:creator><author>Robertxiao</author><pubDate>Thu, 08 Nov 2007 05:43:00 GMT</pubDate><guid>http://www.cppblog.com/Robertxiao/archive/2007/11/08/36130.html</guid><description><![CDATA[RUP：是 Rational Unified Process 这几个词的缩写.我们常称之为统一软件开发过程。它是由IBM Rational 公司提出来的。而这个公司也已经被IT巨头IBM收购。<br>RUP：是一种统一软件开发过程，是软件开发的通用框架。它适用面非常的广、适用于许多的应用领域、适合各种不同软件的开、适合不同性能要求软件的开发。这是一个演化的开发过程。<br>RUP：基于构件的开发，在这个开发过程里较为重视构件的应用。<br>RUP：特点<br>&nbsp;&nbsp;&nbsp;1：用例驱动开发<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;根据需求分析的用例来构建系统<br>&nbsp;&nbsp;&nbsp;2：以基本架构为中心<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A：首先根据平台而不考虑用例来设计系统的架构。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; B：选用其中几个成熟的用例来修改或扩展先前的架构<br>&nbsp;&nbsp;&nbsp;3：迭代增量开发<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 每次迭代时，都选一组还没有实理的用例来作为增量的开发。优先实现风险较大的用例。<br>RUP：过程<br>&nbsp;&nbsp; 1：初始<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这个阶段的任务是获取用户需求、建立系统的业务模型和用户交流。进而确定项目的边界。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这和传统的系统定义、可行性研究、需求分过程是对应的，如果细分这个阶段它主要有以下几个步骤<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.1:明确项目的规模。确定系统边界、验收标准、重要的需求及约束识别主要的业务流程<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.2:评估项目风险。风险的评估有技术、经济、政治等方面。主要是前两者。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.3:制定项目计划。根据项目规模、复杂度、交互时间来合理地制定人员的配备、资源的利用等方面&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 的使用计划。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.4:阶段评审。<br>&nbsp;&nbsp;&nbsp;2：细化<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;任务：分析问题域，建立起健全的构架基础，转移或降低项目中风险最高的部份<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.1:确定构架。构架应稳定，充分降低风险。其次性能要好。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.2:制定构建计划。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.3:建立支持环境。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.4:选择构件。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.5:阶段技术评审<br>&nbsp;&nbsp;&nbsp;3：构建<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 开发完成软件系统的全部功能并进行详细的测试，重点放在管理资源、控制操作、优化成本、进<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 度和质量。在构建完后也要进行阶段评审。<br>&nbsp;&nbsp;&nbsp;4：交付<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 主要任务：对软件进行B测试、制作产品发布及后续的培训等工作。这个阶段完成后也要进行阶段评审，其内容主要有是否要进行下一步的演化、目标实现了吗？及客户的满意度。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;每一个过程中都要技术评审，技术评审的步骤一般是<br>　　1：安排会议日程，确定参与会议的人员。<br>　　2：分发会议材料给评审人员，让他们有时间进行审阅并准备。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3：召开评审会议<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4：会议记录情况。<br>RUP项目管理<br>RUP的工作流程包括两部份：核心工作流程（需求调研、业务建模、分析设计、实施、测试、部署）及核心支持流程（项目管理、变更管理、配置管理）<br><br>业务建模阶段应提交的材料有：商业逻辑模型、业务需求说明、专业词汇表、风险说明、评审说明书。<br><br>分析设计应提交：总体设计报告、系统设计模型、数据库设计模型、数据字典、详细设计报告。<br><br>实施应提交：实施总结书、代码审核意见书、源程序、错误报告及解决情况、应用构件说明书。
<img src ="http://www.cppblog.com/Robertxiao/aggbug/36130.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Robertxiao/" target="_blank">Robertxiao</a> 2007-11-08 13:43 <a href="http://www.cppblog.com/Robertxiao/archive/2007/11/08/36130.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>