<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++,VC</title><link>http://blog.vckbase.com/wangjun/category/1193.html</link><description>C++,VC</description><managingEditor>王骏的BLOG</managingEditor><dc:language>af</dc:language><generator>.Text Version 0.958.2004.214</generator><item><dc:creator>王骏的BLOG</dc:creator><title>VC获取物理网卡MAC地址</title><link>http://blog.vckbase.com/wangjun/archive/2010/02/20/40973.html</link><pubDate>Sat, 20 Feb 2010 07:36:00 GMT</pubDate><guid>http://blog.vckbase.com/wangjun/archive/2010/02/20/40973.html</guid><wfw:comment>http://blog.vckbase.com/wangjun/comments/40973.html</wfw:comment><comments>http://blog.vckbase.com/wangjun/archive/2010/02/20/40973.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.vckbase.com/wangjun/comments/commentRss/40973.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/wangjun/services/trackbacks/40973.html</trackback:ping><description>啥也别说了，直接贴代码：&lt;BR&gt;
&lt;DIV style="BORDER-BOTTOM: windowtext 0.5pt solid; BORDER-LEFT: windowtext 0.5pt solid; PADDING-BOTTOM: 4px; PADDING-LEFT: 5.4pt; WIDTH: 98%; PADDING-RIGHT: 5.4pt; BACKGROUND: #e6e6e6; BORDER-TOP: windowtext 0.5pt solid; BORDER-RIGHT: windowtext 0.5pt solid; PADDING-TOP: 4px"&gt;
&lt;DIV&gt;&lt;IMG align=top src="/Images/OutliningIndicators/None.gif"&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG align=top src="/Images/OutliningIndicators/None.gif"&gt;#include&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;stdafx.h&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG align=top src="/Images/OutliningIndicators/None.gif"&gt;#include&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;atlbase.h&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG align=top src="/Images/OutliningIndicators/None.gif"&gt;#include&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;atlconv.h&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG align=top src="/Images/OutliningIndicators/None.gif"&gt;#include&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;string&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG align=top src="/Images/OutliningIndicators/None.gif"&gt;#include&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;iphlpapi.h&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG align=top src="/Images/OutliningIndicators/None.gif"&gt;&lt;BR&gt;&lt;IMG align=top src="/Images/OutliningIndicators/None.gif"&gt;using&amp;nbsp;namespace&amp;nbsp;std;&lt;BR&gt;&lt;IMG align=top src="/Images/OutliningIndicators/None.gif"&gt;#pragma&amp;nbsp;comment(lib,&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;Iphlpapi.lib&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;)&lt;BR&gt;&lt;IMG align=top src="/Images/OutliningIndicators/None.gif"&gt;&lt;BR&gt;&lt;IMG align=top src="/Images/OutliningIndicators/None.gif"&gt;string&amp;nbsp;GetMac()&lt;BR&gt;&lt;IMG align=top src="/Images/OutliningIndicators/None.gif"&gt;{&lt;BR&gt;&lt;IMG align=top src="/Images/OutliningIndicators/None.gif"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;string&amp;nbsp;strMac;&lt;BR&gt;&lt;IMG align=top src="/Images/OutliningIndicators/None.gif"&gt;&lt;BR&gt;&lt;IMG align=top src="/Images/OutliningIndicators/None.gif"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ULONG&amp;nbsp;ulAdapterInfoSize&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;sizeof(IP_ADAPTER_INFO);&lt;BR&gt;&lt;IMG align=top src="/Images/OutliningIndicators/None.gif"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IP_ADAPTER_INFO&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;*&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;pAdapterInfoBkp&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;NULL,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;*&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;pAdapterInfo&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;(IP_ADAPTER_INFO&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;*&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;)&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;new&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;char&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;[ulAdapterInfoSize];&lt;BR&gt;&lt;IMG align=top src="/Images/OutliningIndicators/None.gif"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;if&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;(&amp;nbsp;GetAdaptersInfo(pAdapterInfo,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;amp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;ulAdapterInfoSize)&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;==&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;ERROR_BUFFER_OVERFLOW&amp;nbsp;)&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&amp;nbsp;缓冲区不够大&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;BR&gt;&lt;IMG align=top src="/Images/OutliningIndicators/None.gif"&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&lt;IMG align=top src="/Images/OutliningIndicators/None.gif"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;delete&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;pAdapterInfo;&lt;BR&gt;&lt;IMG align=top src="/Images/OutliningIndicators/None.gif"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pAdapterInfo&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;(IP_ADAPTER_INFO&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;*&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;)&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;new&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;char&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;[ulAdapterInfoSize];&lt;BR&gt;&lt;IMG align=top src="/Images/OutliningIndicators/None.gif"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pAdapterInfoBkp&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;pAdapterInfo;&lt;BR&gt;&lt;IMG align=top src="/Images/OutliningIndicators/None.gif"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&lt;IMG align=top src="/Images/OutliningIndicators/None.gif"&gt;&lt;BR&gt;&lt;IMG align=top src="/Images/OutliningIndicators/None.gif"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;if&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;(&amp;nbsp;GetAdaptersInfo(pAdapterInfo,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;amp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;ulAdapterInfoSize)&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;==&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;ERROR_SUCCESS&amp;nbsp;)&lt;BR&gt;&lt;IMG align=top src="/Images/OutliningIndicators/None.gif"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&lt;IMG align=top src="/Images/OutliningIndicators/None.gif"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;do&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;{&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&amp;nbsp;遍历所有适配器&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;BR&gt;&lt;IMG align=top src="/Images/OutliningIndicators/None.gif"&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;if&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;(pAdapterInfo&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;-&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;Type&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;==&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;MIB_IF_TYPE_ETHERNET)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&amp;nbsp;判断是否为以太网接口&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;BR&gt;&lt;IMG align=top src="/Images/OutliningIndicators/None.gif"&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&lt;IMG align=top src="/Images/OutliningIndicators/None.gif"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&amp;nbsp;pAdapterInfo-&amp;gt;Description&amp;nbsp;是适配器描述&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;BR&gt;&lt;IMG align=top src="/Images/OutliningIndicators/None.gif"&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&amp;nbsp;pAdapterInfo-&amp;gt;AdapterName&amp;nbsp;是适配器名称&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;BR&gt;&lt;IMG align=top src="/Images/OutliningIndicators/None.gif"&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR&gt;&lt;IMG align=top src="/Images/OutliningIndicators/None.gif"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;for&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;(UINT&amp;nbsp;i&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;;&amp;nbsp;i&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;pAdapterInfo&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;-&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;AddressLength;&amp;nbsp;i&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;++&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;)&lt;BR&gt;&lt;IMG align=top src="/Images/OutliningIndicators/None.gif"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&lt;IMG align=top src="/Images/OutliningIndicators/None.gif"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;char&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;szTmp[&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;8&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;];&lt;BR&gt;&lt;IMG align=top src="/Images/OutliningIndicators/None.gif"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sprintf(szTmp,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;%02X%c&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;,pAdapterInfo&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;-&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;Address[i],&amp;nbsp;(i&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;==&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;pAdapterInfo&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;-&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;AddressLength&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;-&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;1&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;)&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;?&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;'\&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;':'&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;-&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;');&lt;BR&gt;&lt;IMG align=top src="/Images/OutliningIndicators/None.gif"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;strMac.append(szTmp);&lt;BR&gt;&lt;IMG align=top src="/Images/OutliningIndicators/None.gif"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&lt;IMG align=top src="/Images/OutliningIndicators/None.gif"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR&gt;&lt;IMG align=top src="/Images/OutliningIndicators/None.gif"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&lt;IMG align=top src="/Images/OutliningIndicators/None.gif"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pAdapterInfo&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;pAdapterInfo&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;-&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;Next;&lt;BR&gt;&lt;IMG align=top src="/Images/OutliningIndicators/None.gif"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;while&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;(pAdapterInfo);&lt;BR&gt;&lt;IMG align=top src="/Images/OutliningIndicators/None.gif"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&lt;IMG align=top src="/Images/OutliningIndicators/None.gif"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR&gt;&lt;IMG align=top src="/Images/OutliningIndicators/None.gif"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;if&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;(pAdapterInfoBkp)&lt;BR&gt;&lt;IMG align=top src="/Images/OutliningIndicators/None.gif"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;delete&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;pAdapterInfoBkp;&lt;BR&gt;&lt;IMG align=top src="/Images/OutliningIndicators/None.gif"&gt;&lt;BR&gt;&lt;IMG align=top src="/Images/OutliningIndicators/None.gif"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;return&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;strMac;&lt;BR&gt;&lt;IMG align=top src="/Images/OutliningIndicators/None.gif"&gt;}&lt;BR&gt;&lt;IMG align=top src="/Images/OutliningIndicators/None.gif"&gt;&lt;BR&gt;&lt;IMG align=top src="/Images/OutliningIndicators/None.gif"&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;main(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;argc,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;char&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;*&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;argv[])&lt;BR&gt;&lt;IMG align=top src="/Images/OutliningIndicators/None.gif"&gt;{&lt;BR&gt;&lt;IMG align=top src="/Images/OutliningIndicators/None.gif"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;string&amp;nbsp;strMac&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;GetMac();&lt;BR&gt;&lt;IMG align=top src="/Images/OutliningIndicators/None.gif"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;%s\r\n&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;,&amp;nbsp;strMac.c_str());&lt;BR&gt;&lt;IMG align=top src="/Images/OutliningIndicators/None.gif"&gt;&lt;BR&gt;&lt;IMG align=top src="/Images/OutliningIndicators/None.gif"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;return&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;;&lt;BR&gt;&lt;IMG align=top src="/Images/OutliningIndicators/None.gif"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;img src ="http://blog.vckbase.com/wangjun/aggbug/40973.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>王骏的BLOG</dc:creator><title>PCRE修正符及其使用方法</title><link>http://blog.vckbase.com/wangjun/archive/2010/01/20/40815.html</link><pubDate>Wed, 20 Jan 2010 01:39:00 GMT</pubDate><guid>http://blog.vckbase.com/wangjun/archive/2010/01/20/40815.html</guid><wfw:comment>http://blog.vckbase.com/wangjun/comments/40815.html</wfw:comment><comments>http://blog.vckbase.com/wangjun/archive/2010/01/20/40815.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.vckbase.com/wangjun/comments/commentRss/40815.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/wangjun/services/trackbacks/40815.html</trackback:ping><description>&lt;P&gt;（本文是在转载的基础上进行的修改）&lt;BR&gt;下面列出了当前在 PCRE 中可能使用的修正符。括号中是这些修正符的内部 PCRE 名。修正符中的空格和换行被忽略，其它字符会导致错误。&lt;/P&gt;
&lt;P&gt;i (PCRE_CASELESS) &lt;BR&gt;如果设定此修正符，模式中的字符将同时匹配大小写字母。 &lt;BR&gt;m（PCRE_MULTILINE） &lt;BR&gt;默认情况下，PCRE 将目标字符串作为单一的一&amp;#8220;行&amp;#8221;字符所组成的（甚至其中包含有换行符也是如此）。&amp;#8220;行起始&amp;#8221;元字符（^）仅仅匹配字符串的起始，&amp;#8220;行结束&amp;#8221;元字符（$）仅仅匹配字符串的结束，或者最后一个字符是换行符时其前面（除非设定了 D 修正符）。这和 Perl 是一样的。 当设定了此修正符，&amp;#8220;行起始&amp;#8221;和&amp;#8220;行结束&amp;#8221;除了匹配整个字符串开头和结束外，还分别匹配其中的换行符的之后和之前。这和 Perl 的 /m 修正符是等效的。如果目标字符串中没有&amp;#8220;\n&amp;#8221;字符或者模式中没有 ^ 或 $，则设定此修正符没有任何效果。 &lt;BR&gt;s（PCRE_DOTALL） &lt;BR&gt;如果设定了此修正符，模式中的圆点元字符（.）匹配所有的字符，包括换行符。没有此设定的话，则不包括换行符。这和 Perl 的 /s 修正符是等效的。排除字符类例如 [^a] 总是匹配换行符的，无论是否设定了此修正符。 &lt;BR&gt;x（PCRE_EXTENDED） &lt;BR&gt;如果设定了此修正符，模式中的空白字符除了被转义的或在字符类中的以外完全被忽略，在未转义的字符类之外的 # 以及下一个换行符之间的所有字符，包括两头，也都被忽略。这和 Perl 的 /x 修正符是等效的，使得可以在复杂的模式中加入注释。然而注意，这仅适用于数据字符。空白字符可能永远不会出现于模式中的特殊字符序列，例如引入条件子模式的序列 (?( 中间。 &lt;BR&gt;e &lt;BR&gt;如果设定了此修正符，preg_replace() 在替换字符串中对逆向引用作正常的替换，将其作为 PHP 代码求值，并用其结果来替换所搜索的字符串。 &lt;BR&gt;只有 preg_replace() 使用此修正符，其它 PCRE 函数将忽略之。&lt;/P&gt;
&lt;P&gt;Note: 本修正符在 PHP3 中不可用。 &lt;/P&gt;
&lt;P&gt;A（PCRE_ANCHORED） &lt;BR&gt;如果设定了此修正符，模式被强制为&amp;#8220;anchored&amp;#8221;，即强制仅从目标字符串的开头开始匹配。此效果也可以通过适当的模式本身来实现（在 Perl 中实现的唯一方法）。 &lt;BR&gt;D（PCRE_DOLLAR_ENDONLY） &lt;BR&gt;如果设定了此修正符，模式中的美元元字符仅匹配目标字符串的结尾。没有此选项时，如果最后一个字符是换行符的话，美元符号也会匹配此字符之前（但不会匹配任何其它换行符之前）。如果设定了 m 修正符则忽略此选项。Perl 中没有与其等价的修正符。 &lt;BR&gt;S &lt;BR&gt;当一个模式将被使用若干次时，为加速匹配起见值得先对其进行分析。如果设定了此修正符则会进行额外的分析。目前，分析一个模式仅对没有单一固定起始字符的 non-anchored 模式有用。 &lt;BR&gt;U（PCRE_UNGREEDY） &lt;BR&gt;本修正符反转了匹配数量的值使其不是默认的重复，而变成在后面跟上&amp;#8220;?&amp;#8221;才变得重复。这和 Perl 不兼容。也可以通过在模式之中设定 (?U) 修正符或者在数量符之后跟一个问号（如 .*?）来启用此选项。 &lt;BR&gt;X（PCRE_EXTRA） &lt;BR&gt;此修正符启用了一个 PCRE 中与 Perl 不兼容的额外功能。模式中的任何反斜线后面跟上一个没有特殊意义的字母导致一个错误，从而保留此组合以备将来扩充。默认情况下，和 Perl 一样，一个反斜线后面跟一个没有特殊意义的字母被当成该字母本身。当前没有其它特性受此修正符控制。 &lt;BR&gt;u（PCRE_UTF8） &lt;BR&gt;此修正符启用了一个 PCRE 中与 Perl 不兼容的额外功能。模式字符串被当成 UTF-8。本修正符在 Unix 下自 PHP 4.1.0 起可用，在 win32 下自 PHP 4.2.3 起可用。自 PHP 4.3.5 起开始检查模式的 UTF-8 合法性。 &lt;/P&gt;
&lt;P&gt;&lt;BR&gt;使用方法举例：&lt;BR&gt;忽略大小写规则：(?i)a(.*)b&lt;BR&gt;匹配：AokbaseB&lt;BR&gt;&lt;/P&gt;&lt;img src ="http://blog.vckbase.com/wangjun/aggbug/40815.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>王骏的BLOG</dc:creator><title>GZip格式的HTTP页面的解压缩(依赖zlib)</title><link>http://blog.vckbase.com/wangjun/archive/2009/11/04/39726.html</link><pubDate>Wed, 04 Nov 2009 13:49:00 GMT</pubDate><guid>http://blog.vckbase.com/wangjun/archive/2009/11/04/39726.html</guid><wfw:comment>http://blog.vckbase.com/wangjun/comments/39726.html</wfw:comment><comments>http://blog.vckbase.com/wangjun/archive/2009/11/04/39726.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blog.vckbase.com/wangjun/comments/commentRss/39726.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/wangjun/services/trackbacks/39726.html</trackback:ping><description>&lt;P&gt;为了节省带宽许多网站都采用GZip压缩页面，Apache，PHP都能提供GZip支持，经GZip压缩的HTTP页面的HTTP头有如下标记：Content-Encoding = gzip&lt;BR&gt;GZip数据以0x1f,0x8B开头，文件头长度通常为10。&lt;BR&gt;用zlib的uncompress无法解成功，测试了网上许多版本都失败，最后总结了可行的代码：&lt;BR&gt;&lt;BR&gt;int GZipUncompress(Byte *dest, uLong *destLen, Byte *src, uLong srcLen)&amp;nbsp;&amp;nbsp; &lt;BR&gt;{&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;// 本文来源 &lt;A href="http://www.okbase.net"&gt;http://www.okbase.net&lt;/A&gt;&lt;BR&gt;&amp;nbsp;int err;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;z_stream d_stream;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;memset(&amp;amp;d_stream, 0, sizeof(z_stream));&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;d_stream.next_in = src;&lt;BR&gt;&amp;nbsp;d_stream.avail_in = srcLen;&amp;nbsp; &lt;BR&gt;&amp;nbsp;d_stream.next_out = dest;&amp;nbsp; &lt;BR&gt;&amp;nbsp;d_stream.avail_out = *destLen;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;err = inflateInit2(&amp;amp;d_stream, -MAX_WBITS);&lt;BR&gt;&amp;nbsp;if(err != Z_OK)&lt;BR&gt;&amp;nbsp;&amp;nbsp;return(err);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;d_stream.next_in += 10L;&amp;nbsp;// 跳过GZip文件头，这里没有仔细处理，长度可以通过文件头数据取得&lt;/P&gt;
&lt;P&gt;&amp;nbsp;err = inflate(&amp;amp;d_stream, Z_FINISH);&lt;BR&gt;&amp;nbsp;if (err != Z_STREAM_END) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; inflateEnd(&amp;amp;d_stream);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return err == Z_OK ? Z_BUF_ERROR : err;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;&amp;nbsp;*destLen = d_stream.total_out;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;err = inflateEnd(&amp;amp;d_stream);&amp;nbsp; &lt;BR&gt;&amp;nbsp;return(err);&amp;nbsp;&amp;nbsp; &lt;BR&gt;}&amp;nbsp;&amp;nbsp;&lt;BR&gt;&lt;BR&gt;// 测试代码&lt;BR&gt;char *pMem = ... // 数据源&lt;BR&gt;int MemSize; // 数据源长度&lt;BR&gt;&lt;BR&gt;unsigned long BufferSize = MemSize * 6;&lt;BR&gt;char *pBuffer = new char[BufferSize];&amp;nbsp; // BufferSize要足够大&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;memset(pBuffer, 0, BufferSize);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;int result = GZipUncompress((unsigned char *)pBuffer, &amp;amp;BufferSize, (unsigned char *)pMem, MemSize);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(result == Z_OK)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// 成功&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&lt;BR&gt;// 需要改进的几点问题&lt;BR&gt;（1）没有处理目标缓冲区大小不够的情况&lt;BR&gt;（2）跳过GZip文件头的长度没有从文件头中读取&lt;BR&gt;时间不够，需要的朋友请自行修改，改好了记得贴一下自己的代码哦！&lt;/P&gt;&lt;img src ="http://blog.vckbase.com/wangjun/aggbug/39726.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>王骏的BLOG</dc:creator><title>关于C正则表达式库PCRE</title><link>http://blog.vckbase.com/wangjun/archive/2009/10/28/39611.html</link><pubDate>Wed, 28 Oct 2009 07:33:00 GMT</pubDate><guid>http://blog.vckbase.com/wangjun/archive/2009/10/28/39611.html</guid><wfw:comment>http://blog.vckbase.com/wangjun/comments/39611.html</wfw:comment><comments>http://blog.vckbase.com/wangjun/archive/2009/10/28/39611.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.vckbase.com/wangjun/comments/commentRss/39611.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/wangjun/services/trackbacks/39611.html</trackback:ping><description>&lt;P&gt;PCRE 官网 &lt;A href="http://www.pcre.org/"&gt;http://www.pcre.org/&lt;/A&gt;&lt;BR&gt;PCRE Windows版本(包含已编译文件) &lt;A href="http://www.psyon.org/projects/pcre-win32/index.php"&gt;http://www.psyon.org/projects/pcre-win32/index.php&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;(1)注意，如果采用LIB静态链接，一定要在自己的代码里加上：#define PCRE_STATIC&lt;BR&gt;否则会在链接时报如下错误：&lt;BR&gt;RegexDemo.obj : error LNK2001: unresolved external symbol __imp__pcre_exec&lt;BR&gt;RegexDemo.obj : error LNK2001: unresolved external symbol __imp__pcre_compile&lt;BR&gt;&lt;BR&gt;(2)另外，如果使用psyon.org已经编译好的Lib，自己的程序需要在VC7以上编译，因为这些LIB使用了/GS编译开关，如果在VC6下编译会显示如下错误：&lt;BR&gt;error &amp;nbsp; LNK2001: &amp;nbsp; unresolved &amp;nbsp; external &amp;nbsp; symbol &amp;nbsp; __security_cookie &lt;BR&gt;&lt;BR&gt;(3)自己编译PCRE时的注意事项&lt;BR&gt;3.1 运行时库需要与使用该lib的宿主程序一致&lt;BR&gt;3.2 默认PCRE是以递归方式调用match, 当需要处理的字符串比较大时，堆栈就会溢出(stack overflow),处理的办法之一就是将PCRE默认编译为在堆中分配内存，开关在config.h里,#define NO_RECURSE&lt;BR&gt;方法二：采用pcre_recurse_malloc手工从堆中分配内存&lt;BR&gt;&lt;BR&gt;//---------------------------&lt;BR&gt;PCRE测试代码&lt;BR&gt;/* Compile thuswise:&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;*&amp;nbsp;&amp;nbsp; gcc -Wall pcre1.c -I/usr/local/include -L/usr/local/lib -R/usr/local/lib -lpcre&lt;BR&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;*/&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;#include &amp;lt;stdio.h&amp;gt;&lt;BR&gt;#include &amp;lt;string.h&amp;gt;&lt;BR&gt;#include &amp;lt;pcre.h&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;#define OVECCOUNT 30&amp;nbsp;&amp;nbsp;&amp;nbsp; /* should be a multiple of 3 */&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;int main() &lt;BR&gt;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pcre&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *re; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; const char&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *error;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; erroffset;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ovector[OVECCOUNT];&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rc, i;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; char&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; src&amp;nbsp;&amp;nbsp;&amp;nbsp; [] = "111 &amp;lt;title&amp;gt;Hello World&amp;lt;/title&amp;gt; 222";&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; char&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pattern&amp;nbsp;&amp;nbsp; [] = "&amp;lt;title&amp;gt;(.*)&amp;lt;/title&amp;gt;";&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("String : %s\n", src);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("Pattern: \"%s\"\n", pattern);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; re = pcre_compile(pattern, 0, &amp;amp;error, &amp;amp;erroffset, NULL);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (re == NULL) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("PCRE compilation failed at offset %d: %s\n", erroffset, error);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 1;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rc = pcre_exec(re, NULL, src, strlen(src), 0, 0, ovector, OVECCOUNT);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (rc &amp;lt; 0) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (rc == PCRE_ERROR_NOMATCH) printf("Sorry, no match ...\n");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("Matching error %d\n", rc);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; free(re);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 1;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("\nOK, has matched ...\n\n");&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (i = 0; i &amp;lt; rc; i++) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; char *substring_start = src + ovector[2*i];&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int substring_length = ovector[2*i+1] - ovector[2*i];&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("%2d: %.*s\n", i, substring_length, substring_start);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; free(re);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;BR&gt;}&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src ="http://blog.vckbase.com/wangjun/aggbug/39611.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>王骏的BLOG</dc:creator><title>VS2008中 isalnum 判断中文出错</title><link>http://blog.vckbase.com/wangjun/archive/2009/09/19/39009.html</link><pubDate>Sat, 19 Sep 2009 12:56:00 GMT</pubDate><guid>http://blog.vckbase.com/wangjun/archive/2009/09/19/39009.html</guid><wfw:comment>http://blog.vckbase.com/wangjun/comments/39009.html</wfw:comment><comments>http://blog.vckbase.com/wangjun/archive/2009/09/19/39009.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.vckbase.com/wangjun/comments/commentRss/39009.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/wangjun/services/trackbacks/39009.html</trackback:ping><description>&lt;P&gt;在isctype.c中产生断言&lt;/P&gt;
&lt;P&gt;extern "C" int __cdecl _chvalidator_l(&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _locale_t plocinfo,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int c,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int mask&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _LocaleUpdate _loc_update(plocinfo);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _ASSERTE((unsigned)(c + 1) &amp;lt;= 256); // 该句&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;解决方法：&lt;BR&gt;将项目设置中-&amp;gt;配置属性-&amp;gt;C/C++-&amp;gt;语言-&amp;gt;默认Char无符号，选择是(/J)&lt;/P&gt;&lt;img src ="http://blog.vckbase.com/wangjun/aggbug/39009.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>王骏的BLOG</dc:creator><title>一个线程池(ThreadPool)的使用</title><link>http://blog.vckbase.com/wangjun/archive/2009/02/10/36409.html</link><pubDate>Tue, 10 Feb 2009 01:44:00 GMT</pubDate><guid>http://blog.vckbase.com/wangjun/archive/2009/02/10/36409.html</guid><wfw:comment>http://blog.vckbase.com/wangjun/comments/36409.html</wfw:comment><comments>http://blog.vckbase.com/wangjun/archive/2009/02/10/36409.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://blog.vckbase.com/wangjun/comments/commentRss/36409.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/wangjun/services/trackbacks/36409.html</trackback:ping><description>&lt;P align=center&gt;&lt;STRONG&gt;一个线程池的使用&lt;/STRONG&gt;&lt;/P&gt;代码来源:codeproject&lt;BR&gt;&lt;BR&gt;1） 步骤一&lt;BR&gt;#include "ThreadPool.h" 
&lt;P&gt;2）步骤二&lt;BR&gt;从IRunObject派生自己的处理类&lt;BR&gt;class CMyRunObject : public IRunObject&lt;BR&gt;{&lt;BR&gt;public:&lt;BR&gt;&amp;nbsp;CMyRunObject();&lt;BR&gt;&amp;nbsp;~CMyRunObject();&lt;/P&gt;
&lt;P&gt;&amp;nbsp;void Run();&lt;BR&gt;&amp;nbsp;void Initialize()&lt;BR&gt;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;// 初始化&lt;BR&gt;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&lt;BR&gt;&amp;nbsp;bool AutoDelete()&lt;BR&gt;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;// 是否自动删除(线程运行完后，自动删除IRunObject对象&lt;BR&gt;&amp;nbsp;&amp;nbsp;return true;&lt;BR&gt;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&lt;BR&gt;&amp;nbsp;void DeleteInstance()&lt;BR&gt;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;// 删除实例，当作析构来用&lt;BR&gt;&amp;nbsp;&amp;nbsp;delete this;&lt;BR&gt;&amp;nbsp;}&lt;BR&gt;};&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;派生类中必须实现的函数：Run, Initialize, AutoDelete, DeleteInstance&lt;/P&gt;
&lt;P&gt;3）步骤三&lt;BR&gt;启动线程池&lt;BR&gt;CThreadPool m_Pool;&lt;BR&gt;CMyRunObject *pRunObject = new CMyRunObject();&lt;BR&gt;m_Pool.Run(pDeliver);&lt;/P&gt;
&lt;P&gt;关闭线程池&lt;BR&gt;m_pool.Destroy();&lt;/P&gt;
&lt;P&gt;重启线程池&lt;BR&gt;m_pool.Destroy();&lt;BR&gt;m_pool.SetPoolSize(10);&amp;nbsp;&amp;nbsp;// 池的初始线程数量&lt;BR&gt;m_pool.SetPoolMaxSize(100);&amp;nbsp;// 池的最大线程数&lt;/P&gt;
&lt;P&gt;m_pool.Create();&lt;BR&gt;&lt;BR&gt;ThreadPool源代码:&lt;BR&gt;&lt;A href="http://blog.vckbase.com/Files/wangjun/ThreadPool.rar"&gt;http://blog.vckbase.com/Files/wangjun/ThreadPool.rar&lt;/A&gt;&lt;/P&gt;&lt;img src ="http://blog.vckbase.com/wangjun/aggbug/36409.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>王骏的BLOG</dc:creator><title>tinyxml的一个小bug</title><link>http://blog.vckbase.com/wangjun/archive/2008/11/02/35529.html</link><pubDate>Sun, 02 Nov 2008 14:03:00 GMT</pubDate><guid>http://blog.vckbase.com/wangjun/archive/2008/11/02/35529.html</guid><wfw:comment>http://blog.vckbase.com/wangjun/comments/35529.html</wfw:comment><comments>http://blog.vckbase.com/wangjun/archive/2008/11/02/35529.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blog.vckbase.com/wangjun/comments/commentRss/35529.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/wangjun/services/trackbacks/35529.html</trackback:ping><description>tinyxml版本2.5.2&lt;BR&gt;tinyxmlparser.cpp 第785行，TiXmlDocument::Parse函数中&lt;BR&gt;&lt;BR&gt;
&lt;DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid"&gt;
&lt;DIV&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;SPAN style="COLOR: #0000ff"&gt;while&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;(&amp;nbsp;p&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;amp;&amp;amp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;*&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;p&amp;nbsp;)&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;{&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;IMG src="/Images/dot.gif"&gt;..&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;p&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;SkipWhiteSpace(&amp;nbsp;p,&amp;nbsp;encoding&amp;nbsp;);&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;BR&gt;当XML文档最后不是以\r\n结尾，将无法解析，可作如下修改：&lt;BR&gt;&lt;BR&gt;
&lt;DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid"&gt;
&lt;DIV&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;SPAN style="COLOR: #0000ff"&gt;while&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;(&amp;nbsp;p&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;amp;&amp;amp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;*&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;p&amp;nbsp;)&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&amp;nbsp;{&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;IMG src="/Images/dot.gif"&gt;..&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;if&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;p&amp;nbsp;&lt;SPAN style="COLOR: #000000"&gt;&amp;amp;&amp;amp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;*&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;p&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;)&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;p&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;SkipWhiteSpace(&amp;nbsp;p,&amp;nbsp;encoding&amp;nbsp;);&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&amp;nbsp;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;img src ="http://blog.vckbase.com/wangjun/aggbug/35529.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>王骏的BLOG</dc:creator><title>WTL8.0编译错误一例</title><link>http://blog.vckbase.com/wangjun/archive/2008/10/20/35412.html</link><pubDate>Mon, 20 Oct 2008 15:29:00 GMT</pubDate><guid>http://blog.vckbase.com/wangjun/archive/2008/10/20/35412.html</guid><wfw:comment>http://blog.vckbase.com/wangjun/comments/35412.html</wfw:comment><comments>http://blog.vckbase.com/wangjun/archive/2008/10/20/35412.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.vckbase.com/wangjun/comments/commentRss/35412.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/wangjun/services/trackbacks/35412.html</trackback:ping><description>默认WTL8.0向导生成的代码，在VS2008中编译，显示如下错误：&lt;BR&gt;stdafx.h(34) : error C2065: &amp;#8220;_stdcallthunk&amp;#8221;: 未声明的标识符&lt;BR&gt;stdafx.h(34) : error C2070: &amp;#8220;'unknown-type'&amp;#8221;: 非法的 sizeof 操作数&lt;BR&gt;&lt;BR&gt;解决：加上 #include &amp;lt;atlstdthunk.h&amp;gt;&lt;img src ="http://blog.vckbase.com/wangjun/aggbug/35412.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>王骏的BLOG</dc:creator><title>snmp++ 3.2.23中的内存泄漏</title><link>http://blog.vckbase.com/wangjun/archive/2008/03/23/32996.html</link><pubDate>Sun, 23 Mar 2008 12:48:00 GMT</pubDate><guid>http://blog.vckbase.com/wangjun/archive/2008/03/23/32996.html</guid><wfw:comment>http://blog.vckbase.com/wangjun/comments/32996.html</wfw:comment><comments>http://blog.vckbase.com/wangjun/archive/2008/03/23/32996.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blog.vckbase.com/wangjun/comments/commentRss/32996.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/wangjun/services/trackbacks/32996.html</trackback:ping><description>&lt;P&gt;关键词：memory leak,snmp++&lt;BR&gt;&lt;BR&gt;log.h 中&lt;BR&gt;static AgentLog* log() &lt;BR&gt;&amp;nbsp;&amp;nbsp; { if (!instance) init(new AgentLogImpl()); return instance; }&lt;BR&gt;分配的instance没有释放，造成64字节(64 bytes)的内存泄漏。&lt;/P&gt;
&lt;P&gt;解决：&lt;BR&gt;log.h 中增加delete_log_instance()函数：&lt;/P&gt;
&lt;P&gt;class DLLOPT DefaultLog&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;....&lt;BR&gt;&amp;nbsp;static void delete_log_instance()&lt;BR&gt;&amp;nbsp;{ if (instance) delete instance; instance = 0;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;....&lt;BR&gt;};&lt;/P&gt;
&lt;P&gt;LOG_END的定义修改如下：&lt;BR&gt;#define LOG_END&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;\&lt;BR&gt;&amp;nbsp;&amp;nbsp;*DefaultLog::log() += DefaultLog::log_entry();&amp;nbsp;\&lt;BR&gt;&amp;nbsp;&amp;nbsp;DefaultLog::delete_log_entry();&amp;nbsp;&amp;nbsp;&amp;nbsp;\&lt;BR&gt;&amp;nbsp;&amp;nbsp;DefaultLog::log()-&amp;gt;unlock();&amp;nbsp;&amp;nbsp;&amp;nbsp;\&lt;BR&gt;&amp;nbsp;&amp;nbsp;DefaultLog::delete_log_instance();&amp;nbsp;&amp;nbsp;\&lt;BR&gt;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;\&lt;BR&gt;&lt;BR&gt;如果不使用日志功能，可以在编译snmp++的时候：#define _NO_LOGGING&lt;BR&gt;这样也不会存在这个问题。&lt;BR&gt;&lt;/P&gt;&lt;img src ="http://blog.vckbase.com/wangjun/aggbug/32996.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>王骏的BLOG</dc:creator><title>Sockets GNU库在VC6中的编译要点</title><link>http://blog.vckbase.com/wangjun/archive/2008/02/01/32450.html</link><pubDate>Fri, 01 Feb 2008 00:42:00 GMT</pubDate><guid>http://blog.vckbase.com/wangjun/archive/2008/02/01/32450.html</guid><wfw:comment>http://blog.vckbase.com/wangjun/comments/32450.html</wfw:comment><comments>http://blog.vckbase.com/wangjun/archive/2008/02/01/32450.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.vckbase.com/wangjun/comments/commentRss/32450.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/wangjun/services/trackbacks/32450.html</trackback:ping><description>1)如果不需要使用OpenSSL，可以将sockets-config.h文件中的&lt;BR&gt;#define HAVE_OPENSSL注释掉&lt;BR&gt;&lt;BR&gt;2)在C/C++,C++ Language选项中，需提供RTTI支持：Enable Run-Time Type Information(RTTI)&lt;BR&gt;&lt;BR&gt;3)如果编译为Lib,注意C/C++,Code Generation中Use run-time library中的选项需要与使用该库的程序配套&lt;BR&gt;&lt;img src ="http://blog.vckbase.com/wangjun/aggbug/32450.html" width = "1" height = "1" /&gt;</description></item></channel></rss>