﻿<?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++博客-gewala</title><link>http://www.cppblog.com/gewala/</link><description /><language>zh-cn</language><lastBuildDate>Thu, 23 Apr 2026 10:10:42 GMT</lastBuildDate><pubDate>Thu, 23 Apr 2026 10:10:42 GMT</pubDate><ttl>60</ttl><item><title>SVN客户端脚本(LUA)</title><link>http://www.cppblog.com/gewala/archive/2010/08/08/122698.html</link><dc:creator>gewala</dc:creator><author>gewala</author><pubDate>Sun, 08 Aug 2010 13:22:00 GMT</pubDate><guid>http://www.cppblog.com/gewala/archive/2010/08/08/122698.html</guid><wfw:comment>http://www.cppblog.com/gewala/comments/122698.html</wfw:comment><comments>http://www.cppblog.com/gewala/archive/2010/08/08/122698.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/gewala/comments/commentRss/122698.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/gewala/services/trackbacks/122698.html</trackback:ping><description><![CDATA[<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #000000;">--</span><span style="color: #000000;">打开日志文件<br></span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #000000;">svnlogPath&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;assert(arg[</span><span style="color: #000000;">3</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;">&nbsp;3</span>&nbsp;<span style="color: #000000;">svnlog&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;assert(io.open(svnlogPath,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">r</span><span style="color: #000000;">"</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;">&nbsp;4</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;"></span><span style="color: #000000;">--</span><span style="color: #000000;">日志是否为空<br></span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;svnlog:read(</span><span style="color: #000000;">0</span><span style="color: #000000;">)&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;nil&nbsp;then<br></span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">--</span><span style="color: #000000;">日志为空<br></span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;svnlog:close();<br></span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;io.stderr:write(</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;">10</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;os.exit(</span><span style="color: #000000;">1</span><span style="color: #000000;">);<br></span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br></span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">--</span><span style="color: #000000;">检查日志内容<br></span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;local&nbsp;count&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br></span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">true</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">do</span><span style="color: #000000;"><br></span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local&nbsp;line&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;svnlog:read();<br></span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;line&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;nil&nbsp;then<br></span><span style="color: #008080;">18</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">break</span><span style="color: #000000;">;<br></span><span style="color: #008080;">19</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br></span><span style="color: #008080;">20</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">21</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">--</span><span style="color: #000000;">查找是否匹配<br></span><span style="color: #008080;">22</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">.len(line)&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;">23</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;not&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">.find(line,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">.:%s*%S</span><span style="color: #000000;">"</span><span style="color: #000000;">)&nbsp;then<br></span><span style="color: #008080;">24</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;not&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">.find(line, ".\239\188\154%s*%S"</span><span style="color: #000000;">)&nbsp;then<br></span><span style="color: #008080;">25</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;svnlog:close();<br></span><span style="color: #008080;">26</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;io.stderr:write(</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;">27</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;os.exit(</span><span style="color: #000000;">1</span><span style="color: #000000;">);<br></span><span style="color: #008080;">28</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br></span><span style="color: #008080;">29</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br></span><span style="color: #008080;">30</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br></span><span style="color: #008080;">31</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">32</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;count&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br></span><span style="color: #008080;">33</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;end<br></span><span style="color: #008080;">34</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">35</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">--</span><span style="color: #000000;">检查行数是否</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">6行<br></span><span style="color: #008080;">36</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;count&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">6</span><span style="color: #000000;">&nbsp;then<br></span><span style="color: #008080;">37</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;svnlog:close();<br></span><span style="color: #008080;">38</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;io.stderr:write(</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;">39</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;os.exit(</span><span style="color: #000000;">1</span><span style="color: #000000;">);<br></span><span style="color: #008080;">40</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;end<br></span><span style="color: #008080;">41</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">42</span>&nbsp;<span style="color: #000000;">end<br></span><span style="color: #008080;">43</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">44</span>&nbsp;<span style="color: #000000;">svnlog:close();<br></span><span style="color: #008080;">45</span>&nbsp;<span style="color: #000000;"></span></div>
<br> <img src ="http://www.cppblog.com/gewala/aggbug/122698.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/gewala/" target="_blank">gewala</a> 2010-08-08 21:22 <a href="http://www.cppblog.com/gewala/archive/2010/08/08/122698.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在EZ430开发板的串口类异常</title><link>http://www.cppblog.com/gewala/archive/2009/11/08/100379.html</link><dc:creator>gewala</dc:creator><author>gewala</author><pubDate>Sat, 07 Nov 2009 16:00:00 GMT</pubDate><guid>http://www.cppblog.com/gewala/archive/2009/11/08/100379.html</guid><wfw:comment>http://www.cppblog.com/gewala/comments/100379.html</wfw:comment><comments>http://www.cppblog.com/gewala/archive/2009/11/08/100379.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/gewala/comments/commentRss/100379.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/gewala/services/trackbacks/100379.html</trackback:ping><description><![CDATA[&nbsp; 我发现串口类cnComm在串口转USB的设备上有些能工作（USB430），但在EZ430上却不能工作，很奇怪！我怀疑是硬件问题，毕竟串口转USB硬件上有差别。我发现cnComm的线程一直收到一些不存在的事件，导致死循环。<br>&nbsp; 今天上网看了一篇资料，说是那个DCB配置了硬件握手协议导致了一些不支持这个功能的串口转USB设备出错。我觉得有点道理，有时间试验一下。先看一下cnComm的DCB配置情况。<br><br><fieldset><legend>摘抄</legend>
<p>&nbsp;&nbsp;&nbsp; 使用API进行串口编程时设置串口属性（SetCommState）是一条必经之路，其DCB结构几乎涵盖了所有和串口通讯相关的资源设置，由于有些设备需要使用RTS和CTS进行数据的收发控制，为了提高接收效率可以使用RTS握手选项dcb.fRtsControl=RTS_CONTROL_HANDSHAKE; 在标准串口下使用一切正常，但在一些没有标准串口的笔记本上却不能发送数据，后经过仔细排查发现就是RTS握手选项搞的鬼，关闭此选项后一切恢复正常。</p>
<p>&nbsp;&nbsp;&nbsp; 由于公司只有一种USB转RS232的设备，所以也没有测试其他品牌/类型的设备是否也存在这个问题。如果有朋友遇到串口通讯在USB转RS232下不好用的时候，可以看看RTS握手选项的状态。</p>
</fieldset><br><span style="background-color: yellow; color: #000000;">&nbsp;&nbsp;&nbsp; 发现cnComm打开了发送和接收的流控制，fDtrControl=DTR_CONTROL_ENABLE,fRtrControl=RTR_CONTROL_ENABLE。有可能是这个原因。</span><br> <img src ="http://www.cppblog.com/gewala/aggbug/100379.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/gewala/" target="_blank">gewala</a> 2009-11-08 00:00 <a href="http://www.cppblog.com/gewala/archive/2009/11/08/100379.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>内存溢出检测学习</title><link>http://www.cppblog.com/gewala/archive/2009/11/03/100084.html</link><dc:creator>gewala</dc:creator><author>gewala</author><pubDate>Tue, 03 Nov 2009 14:53:00 GMT</pubDate><guid>http://www.cppblog.com/gewala/archive/2009/11/03/100084.html</guid><wfw:comment>http://www.cppblog.com/gewala/comments/100084.html</wfw:comment><comments>http://www.cppblog.com/gewala/archive/2009/11/03/100084.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/gewala/comments/commentRss/100084.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/gewala/services/trackbacks/100084.html</trackback:ping><description><![CDATA[&nbsp; 最近发现CRT控制台程序没有TRACE和内存溢出检查，很郁闷。无聊中翻看MSDN的Memory Management and the Debug Heap篇，发现C的Debug版本用_malloc_dbg代替malloc,而_malloc_dbg者给数据堆加上一个控制头组成链表，方便记录溢出。原话如下：<br>&nbsp; When you request a memory block, the debug heap manager allocates from the base
heap a <span style="font-weight: bold;">slightly larger block of memory than requested and returns a pointer to
your portion of that block</span>. For example, suppose your application contains the
call: <code>malloc( 10 )</code>. In a release build, <a href="http://www.cppblog.com/gewala/admin/_crt_malloc.htm">malloc</a> would call the base heap allocation routine
requesting an allocation of 10 bytes. In a debug build, however, <strong>malloc</strong>
would call <a href="http://www.cppblog.com/gewala/admin/_crt__malloc_dbg.htm">_malloc_dbg</a>, which would then call
the base heap allocation routine requesting an allocation of 10 bytes plus
approximately 36 bytes of additional memory. All the resulting memory blocks in
the debug heap are connected in a single linked list, <span style="font-weight: bold;">ordered according to when
they were allocated:
</span><br>&nbsp; 那个控制头的数据结构如下：<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">typedef&nbsp;</span><span style="color: #0000ff;">struct</span><span style="color: #000000;">&nbsp;_CrtMemBlockHeader<br>{<br></span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;Pointer&nbsp;to&nbsp;the&nbsp;block&nbsp;allocated&nbsp;just&nbsp;before&nbsp;this&nbsp;one:</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">struct</span><span style="color: #000000;">&nbsp;_CrtMemBlockHeader&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">pBlockHeaderNext;&nbsp;<br></span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;Pointer&nbsp;to&nbsp;the&nbsp;block&nbsp;allocated&nbsp;just&nbsp;after&nbsp;this&nbsp;one:</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">struct</span><span style="color: #000000;">&nbsp;_CrtMemBlockHeader&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">pBlockHeaderPrev;&nbsp;<br>&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">szFileName;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;File&nbsp;name</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;nLine;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;Line&nbsp;number</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;size_t&nbsp;nDataSize;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;Size&nbsp;of&nbsp;user&nbsp;block</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;nBlockUse;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;Type&nbsp;of&nbsp;block</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">long</span><span style="color: #000000;">&nbsp;lRequest;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;Allocation&nbsp;number<br></span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;Buffer&nbsp;just&nbsp;before&nbsp;(lower&nbsp;than)&nbsp;the&nbsp;user's&nbsp;memory:</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;unsigned&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;gap[nNoMansLandSize];&nbsp;&nbsp;<br>}&nbsp;_CrtMemBlockHeader;<br></span></div>
<code></code>
<br>
&nbsp; 这个nBlockUse有6种内存块，具体含义还没有搞清楚，分别如下<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;Memory&nbsp;block&nbsp;identification&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">#define</span><span style="color: #000000;">&nbsp;_FREE_BLOCK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">#define</span><span style="color: #000000;">&nbsp;_NORMAL_BLOCK&nbsp;&nbsp;&nbsp;&nbsp;1</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">#define</span><span style="color: #000000;">&nbsp;_CRT_BLOCK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">#define</span><span style="color: #000000;">&nbsp;_IGNORE_BLOCK&nbsp;&nbsp;&nbsp;&nbsp;3</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">#define</span><span style="color: #000000;">&nbsp;_CLIENT_BLOCK&nbsp;&nbsp;&nbsp;&nbsp;4</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">#define</span><span style="color: #000000;">&nbsp;_MAX_BLOCKS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5</span></div>
&nbsp; 检测内存溢出用_CrtDumpMemoryLeaks(),在<span style="font-weight: bold;">crtdbg.h</span>中定义。有时间研究一下crtdbg.h文件。<br>&nbsp; 参考<a href="http://www.cnblogs.com/phinecos/archive/2009/10/29/1592604.html">http://www.cnblogs.com/phinecos/archive/2009/10/29/1592604.html</a><br><br><br> <img src ="http://www.cppblog.com/gewala/aggbug/100084.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/gewala/" target="_blank">gewala</a> 2009-11-03 22:53 <a href="http://www.cppblog.com/gewala/archive/2009/11/03/100084.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个时间软件</title><link>http://www.cppblog.com/gewala/archive/2009/10/21/99139.html</link><dc:creator>gewala</dc:creator><author>gewala</author><pubDate>Wed, 21 Oct 2009 14:18:00 GMT</pubDate><guid>http://www.cppblog.com/gewala/archive/2009/10/21/99139.html</guid><wfw:comment>http://www.cppblog.com/gewala/comments/99139.html</wfw:comment><comments>http://www.cppblog.com/gewala/archive/2009/10/21/99139.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/gewala/comments/commentRss/99139.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/gewala/services/trackbacks/99139.html</trackback:ping><description><![CDATA[&nbsp; 从NIST网站上下了个时间软件，看起来很古老，但功能强大。我在NIST网站上一直找不到网络时间服务器，但在这个软件中发现可以下载更新服务器地址，很好很强大。<br><a href="http://www.cppblog.com/Files/gewala/nistime-32bit.rar" title="下载">下载</a><br>&nbsp; <br>
<div style="text-align: center;"><img  src="http://www.cppblog.com/images/cppblog_com/gewala/nistime.JPG" border="0"><br>  </div><img src ="http://www.cppblog.com/gewala/aggbug/99139.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/gewala/" target="_blank">gewala</a> 2009-10-21 22:18 <a href="http://www.cppblog.com/gewala/archive/2009/10/21/99139.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一些API函数--《windows程序设计》</title><link>http://www.cppblog.com/gewala/archive/2009/10/20/99068.html</link><dc:creator>gewala</dc:creator><author>gewala</author><pubDate>Tue, 20 Oct 2009 14:36:00 GMT</pubDate><guid>http://www.cppblog.com/gewala/archive/2009/10/20/99068.html</guid><wfw:comment>http://www.cppblog.com/gewala/comments/99068.html</wfw:comment><comments>http://www.cppblog.com/gewala/archive/2009/10/20/99068.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/gewala/comments/commentRss/99068.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/gewala/services/trackbacks/99068.html</trackback:ping><description><![CDATA[&nbsp;&nbsp; 《window程序设计》果然是经典，相对于MFC来说SDK简直是返璞归真啊。继续摘录一些API函数和技巧：<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080;"></span><span style="color: #000000;"> &nbsp; CheckRadioButton(hwnd,IDC_SERVER1,IDC_SERVER10,&nbsp;wServer);</span></div>
&nbsp; 1、<font>Selects (adds a check mark to) a given radio button in a group and clears
(removes a check mark from) all other radio buttons in the group. </font>
在IDC_SERVER1-IDC_SERVER10中选中wServer的ID，有点像分组。<br><a></a><br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">&nbsp; DialogBoxParam&nbsp;(hInst,&nbsp;TEXT&nbsp;(</span><span style="color: #000000;">"</span><span style="color: #000000;">Servers</span><span style="color: #000000;">"</span><span style="color: #000000;">),&nbsp;hwnd,&nbsp;ServerDlg,&nbsp;(LPARAM)&nbsp;szIPAddr);<br></span></div>
&nbsp; 2、可以在WM_INITDIALOG的LPARAM传参数，建立模态对话框。ServerDlg为消息处理函数，szIPAddr为参数，在WM_INITDIALOG消息响应中处理LPARAM的值。<br><br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><span style="color: #000000;"></span><span style="color: #000000;">typedef char *&nbsp; va_list;<br></span><span style="color: #000000;"><br></span><span style="color: #0000ff;">#define</span><span style="color: #000000;">&nbsp;_INTSIZEOF(n)&nbsp;&nbsp;&nbsp;(&nbsp;(sizeof(n)&nbsp;+&nbsp;sizeof(int)&nbsp;-&nbsp;1)&nbsp;&amp;&nbsp;~(sizeof(int)&nbsp;-&nbsp;1)&nbsp;)</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">#define</span><span style="color: #000000;">&nbsp;va_start(ap,v)&nbsp;&nbsp;(&nbsp;ap&nbsp;=&nbsp;(va_list)&amp;v&nbsp;+&nbsp;_INTSIZEOF(v)&nbsp;)</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">#define</span><span style="color: #000000;">&nbsp;va_arg(ap,t)&nbsp;&nbsp;&nbsp;&nbsp;(&nbsp;*(t&nbsp;*)((ap&nbsp;+=&nbsp;_INTSIZEOF(t))&nbsp;-&nbsp;_INTSIZEOF(t))&nbsp;)</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">#define</span><span style="color: #000000;">&nbsp;va_end(ap)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(&nbsp;ap&nbsp;=&nbsp;(va_list)0&nbsp;)</span></div>
&nbsp;
3、va_list可变参数的结构，有点复杂慢慢看。<br><font id="zoom" class="f14">&nbsp; 一般的用法是这样(个人理解)
<br>va_list&nbsp;args;&nbsp;//声明变量
<br>va_start(args,&nbsp;fmt);&nbsp;//开始解析。args指向fmt后面的参数
<br>TYPE&nbsp;var&nbsp;=&nbsp;va_arg(args,&nbsp;TYPE);&nbsp;//取下一个参数并返回。args指向下一个参数
<br>va_end(args);&nbsp;//结束解析<br></font>
<a href="http://hi.baidu.com/kang_liang/blog/item/168c9059a9a1ca2d2934f05f.html">http://hi.baidu.com/kang_liang/blog/item/168c9059a9a1ca2d2934f05f.html</a><br><br>&nbsp; 4、wsprintf和wvsprintf的区别，从它们的参数可以看出。<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;wsprintf(<br>&nbsp;&nbsp;LPTSTR&nbsp;lpOut,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;output&nbsp;buffer</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;LPCTSTR&nbsp;lpFmt,&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;format-control&nbsp;string</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;<img src="http://www.cppblog.com/Images/dot.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;optional&nbsp;arguments</span><span style="color: #008000;"><br></span><span style="color: #000000;">);<br><br>int wvsprintf(
LPTSTR<em> <a href_cetemp="http://www.cppblog.com/gewala/admin/EditPosts.aspx?postid=99068" class="synParam" onclick="showTip(this)" href="">lpOutput</a></em>,  // buffer for output
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LPCTSTR<em> <a href_cetemp="http://www.cppblog.com/gewala/admin/EditPosts.aspx?postid=99068" class="synParam" onclick="showTip(this)" href="">lpFormat</a></em>, // format-control string
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; va_list<em> <a href="http://www.cppblog.com/gewala/admin/EditPosts.aspx?postid=99068" class="synParam" onclick="showTip(this)" text-decoration:="" underline;="">  </a></em></span><em><a href="http://www.cppblog.com/gewala/admin/EditPosts.aspx?postid=99068" class="synParam" onclick="showTip(this)" text-decoration:="" underline;="">// variable list of format-control arguments<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; );
<br></a></em></div>
<p style="font-family: 宋体;">&nbsp; wsprintf纯粹是格式化字符串，wvsprintf是以参数列表Va_list格式化字符串。</p>
<p><em><a href="http://www.cppblog.com/gewala/admin/EditPosts.aspx?postid=99068" class="synParam" onclick="showTip(this)" text-decoration:="" underline;="">       </a></em></p><img src ="http://www.cppblog.com/gewala/aggbug/99068.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/gewala/" target="_blank">gewala</a> 2009-10-20 22:36 <a href="http://www.cppblog.com/gewala/archive/2009/10/20/99068.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>strtok用法--提取字符串</title><link>http://www.cppblog.com/gewala/archive/2009/10/19/98999.html</link><dc:creator>gewala</dc:creator><author>gewala</author><pubDate>Mon, 19 Oct 2009 15:05:00 GMT</pubDate><guid>http://www.cppblog.com/gewala/archive/2009/10/19/98999.html</guid><wfw:comment>http://www.cppblog.com/gewala/comments/98999.html</wfw:comment><comments>http://www.cppblog.com/gewala/archive/2009/10/19/98999.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/gewala/comments/commentRss/98999.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/gewala/services/trackbacks/98999.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 最近看Petzold的《windows程序设计》，在Internet那章中看到如何在字符串中提取IP地址，特地标记一下：<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->1&nbsp;GetDlgItemTextA&nbsp;(hwnd,&nbsp;wServer,&nbsp;szLabel,&nbsp;sizeof&nbsp;(szLabel));<br>2&nbsp;strtok&nbsp;(szLabel,&nbsp;"(");<br>3&nbsp;strcpy&nbsp;(szServer,&nbsp;strtok&nbsp;(NULL,&nbsp;")"));<br></div>
&nbsp;&nbsp;&nbsp;
在Msdn上查了一下，有下面一段：<!--css_end-->
<p>&nbsp;&nbsp;&nbsp; On the first call to <strong> strtok</strong> , the function skips leading delimiters and
returns a pointer to the first token in <em> strToken</em> , terminating the token
with a null character. More tokens can be broken out of the remainder of
<em> strToken</em>  by a series of calls to <strong> strtok</strong> . Each call to
<strong> strtok</strong>  modifies <em> strToken</em>  by inserting a null character after the
token returned by that call. To read the next token from <em> strToken</em> , call
<strong> strtok</strong>  with a <strong> NULL</strong>  value for the <em> strToken</em>  argument. The
<strong> NULL</strong>  <em> strToken</em>  argument causes <strong> strtok</strong>  to search for the next
token in the modified <em> strToken</em> . The <em> strDelimit</em>  argument can take
any value from one call to the next so that the set of delimiters may vary.</p>
<p><strong> <strong> Warning</strong> </strong> &nbsp;&nbsp;&nbsp;Each of these functions uses a <span style="background-color: yellow;">static
variable for parsing the string into tokens. If multiple or simultaneous calls
are made to the same function, a high potential for data corruption and
inaccurate results exists.</span> Therefore, do not attempt to call the same function
simultaneously for different strings and be aware of calling one of these
function from within a loop where another routine may be called that uses the
same function.&nbsp; However, calling this function simultaneously from multiple
threads does not have undesirable effects.</p>
&nbsp;&nbsp;&nbsp; 看来用了静态变量，还好有多线程的C运行库，否则在多线程在有麻烦了。<br>
<br> <img src ="http://www.cppblog.com/gewala/aggbug/98999.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/gewala/" target="_blank">gewala</a> 2009-10-19 23:05 <a href="http://www.cppblog.com/gewala/archive/2009/10/19/98999.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>