<?xml version="1.0" encoding="UTF-8"?>
  <feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html"><![CDATA[ClassyK]]></title>
  <subtitle type="html"><![CDATA[工作与思考]]></subtitle>
  <id>http://www.panzhishi.com/classyk/</id>
  <link rel="alternate" type="text/html" href="http://www.panzhishi.com/classyk/" /> 
  <link rel="self" type="application/atom+xml" href="http://www.panzhishi.com/classyk/atom.asp" /> 
  <generator uri="http://www.pjhome.net/" version="2.8">PJBlog3</generator> 
  <updated>2009-12-20T14:03:46+08:00</updated>

  <entry>
	  <title type="html"><![CDATA[边下边看的实现方式]]></title>
	  <author>
		 <name>ClassyK</name>
		 <uri>http://www.panzhishi.com/classyk/</uri>
		 <email>classyk#vip.qq.com</email>
	  </author>
	  <category term="" scheme="http://www.panzhishi.com/classyk/default.asp?cateID=4" label="C/C++" /> 
	  <updated>2009-12-20T14:03:46+08:00</updated>
	  <published>2009-12-20T14:03:46+08:00</published>
		  <summary type="html"><![CDATA[<p>&nbsp;&nbsp;&nbsp; 最近折腾了一阵子的边下边看，总算是有点眉目，能支持一部分格式的边下边看了。</p>
<p>&nbsp;&nbsp;&nbsp; 这不是啥新技术，很多下载程序都有边下边看，但是它们的支持并不好。为了支持更多的文件格式，下载工具使用的是http服务器的方式来提供播放数据。这可以兼容更多的播放器，然而致命的弱点就是拖动进度条时，很可能就无限期挂起。这种方式的实现，具体可以参与<a target="_blank" href="http://www.easymule.com/en-us/"><span style="color: #ff6600">easyMule</span></a>的源码。</p>
<p>&nbsp;&nbsp;&nbsp; 另外一种方式就是使用directshow的filter来做。为了实现对未知视频文件的边下边看，需要source filter与splitter filter，这里最好的示例就是微软在windows sdk中的memfile项目。尽管memfile有些bug，但是非常值得参考(虽然memfile的bug并不多，确是折磨了我一阵子，主要是刚开始没有耐心仔细阅读directshow的基础文档导致的)。这种方案的优势是对进度条的拖动支持很好，但是其弱点就是无法支持各种格式。不过对大部分应用而言，应当也够了。除了memfile外，如果需要rmvb，avi，mkv等格式的便下边看，可以去看看<a target="_blank" href="http://mpc-hc.svn.sourceforge.net/"><span style="color: #ff6600">hc-mpc</span></a>中的解码器部分，以便查阅为啥ms的memfile不能工作。</p>
<p>&nbsp;&nbsp;&nbsp; 不过上面的方法到目前而言，也有问题我还没有解决，那就是缓冲百分比的问题。主要是每个格式的处理不同。譬如realmedia的文件，刚开始启动播放的时候，它除了读取文件头外，还需要读取文件尾。而要做一个各种格式都适合的方式，是很难的。(播放位置，以及缓冲区长度倒是可以用比特率来大概的计算出来)。</p>
<p>&nbsp;&nbsp;&nbsp; 另外，需要提到的是迅雷的thunder realmedia splitter,不知道是否改自hc-mpc中的代码。当这个thunder realmedia splitter工作(正在播放时)，有可能导致其他播放器同时播放rmvb文件失败。但hc-mpc中的realmedia splitter则不会。</p>
<p>&nbsp;&nbsp; 最后，感谢<a target="_blank" href="http://www.gdcl.co.uk"><span style="color: #ff6600">www.gdcl.co.uk</span></a>网站提供的wmv parser源码，让我可以顺利的在线播放wmv文件。</p>
<p>&nbsp;</p>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.panzhishi.com/classyk/article/cpp/106.htm" /> 
	  <id>http://www.panzhishi.com/classyk/default.asp?id=106</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[CppE4X更新]]></title>
	  <author>
		 <name>ClassyK</name>
		 <uri>http://www.panzhishi.com/classyk/</uri>
		 <email>classyk#vip.qq.com</email>
	  </author>
	  <category term="" scheme="http://www.panzhishi.com/classyk/default.asp?cateID=21" label="CppE4X" /> 
	  <updated>2009-08-29T23:23:03+08:00</updated>
	  <published>2009-08-29T23:23:03+08:00</published>
		  <summary type="html"><![CDATA[<p>&nbsp;&nbsp;&nbsp; 这次更新比较大，同时修改了字符集转换函数，这样在其他工程里使用LinCharSet.h的时候不会产生编译/链接问题。</p>
<p>&nbsp;&nbsp;&nbsp; 解决了很多bug，同时考虑到使用方便的问题，增加了一部分更加方便处理的函数。</p>
<p>&nbsp;&nbsp;&nbsp; 文档依然没有做。</p>
<p>&nbsp;&nbsp;&nbsp; release cppe4x v2;</p>
<p>&nbsp;&nbsp;&nbsp; <a target="_blank" href="http://code.google.com/p/cppe4x/">CppE4X on GoogleCode</a></p>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.panzhishi.com/classyk/article/104.html" /> 
	  <id>http://www.panzhishi.com/classyk/default.asp?id=104</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[字符集转换（更新）]]></title>
	  <author>
		 <name>ClassyK</name>
		 <uri>http://www.panzhishi.com/classyk/</uri>
		 <email>classyk#vip.qq.com</email>
	  </author>
	  <category term="" scheme="http://www.panzhishi.com/classyk/default.asp?cateID=4" label="C/C++" /> 
	  <updated>2009-08-17T13:51:13+08:00</updated>
	  <published>2009-08-17T13:51:13+08:00</published>
		  <summary type="html"><![CDATA[<p>当工程中混用stl与非stl模式的时候，原来的代码容易产生问题。</p>
<p>主要原因是因为stl与非stl版本的函数名相同。故此稍作修改，让他们可以一定程度并存下来。</p>
<div class="codeText">
<div class="codeHead">C++代码</div>
<ol class="dp-cpp">
    <li class="alt"><span><span class="preprocessor">#pragma&nbsp;once </span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="preprocessor">#include&nbsp;&lt;malloc.h&gt; </span><span>&nbsp;&nbsp;</span></li>
    <li><span class="preprocessor">#include&nbsp;&lt;windows.h&gt; </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li><span class="preprocessor">#define&nbsp;USE_LIN_CHAR_SET_VARIANT&nbsp;char*&nbsp;_lin_dst&nbsp;=&nbsp;0;&nbsp;wchar_t*&nbsp;_lin_wdst&nbsp;=&nbsp;0;&nbsp;int&nbsp;_lin_dst_size&nbsp;=&nbsp;0; </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li><span class="preprocessor">#define&nbsp;LIN_CHAR_SET_NO_WARNING&nbsp;&nbsp;_lin_dst;&nbsp;_lin_wdst;_lin_dst_size; </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li><span class="preprocessor">#define&nbsp;USE_LIN_CHAR_SET&nbsp;USE_LIN_CHAR_SET_VARIANT;LIN_CHAR_SET_NO_WARNING </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="preprocessor">#ifdef&nbsp;LIN_CHAR_SET_USE_STL </span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="preprocessor">#include&nbsp;&lt;string&gt; </span><span>&nbsp;&nbsp;</span></li>
    <li><span>std::string&nbsp;_w2a_s(&nbsp;</span><span class="keyword">const</span><span>&nbsp;std::wstring&amp;&nbsp;pwcsSrc,&nbsp;</span><span class="datatypes">int</span><span>&nbsp;codepage) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>{ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;USE_LIN_CHAR_SET; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;_lin_dst_size&nbsp;=&nbsp;pwcsSrc.size()*3; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;_lin_dst&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;(std::</span><span class="keyword">nothrow</span><span>)&nbsp;</span><span class="datatypes">char</span><span>[&nbsp;_lin_dst_size]; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(&nbsp;_lin_dst&nbsp;==&nbsp;0)&nbsp;</span><span class="keyword">return</span><span>&nbsp;std::string(); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;_lin_dst_size&nbsp;=&nbsp;WideCharToMultiByte(&nbsp;codepage,&nbsp;0,&nbsp;pwcsSrc.c_str(),&nbsp;pwcsSrc.length(),&nbsp;_lin_dst,&nbsp;_lin_dst_size,&nbsp;0,&nbsp;0); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(&nbsp;_lin_dst_size&nbsp;==&nbsp;0)&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">delete</span><span>[]&nbsp;_lin_dst; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;std::string(); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;_lin_dst[_lin_dst_size]&nbsp;=&nbsp;0; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;std::string&nbsp;result&nbsp;=&nbsp;_lin_dst; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">delete</span><span>[]&nbsp;_lin_dst; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;result; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>} &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>std::wstring&nbsp;_a2w_s(&nbsp;</span><span class="keyword">const</span><span>&nbsp;std::string&amp;&nbsp;pszSrc,&nbsp;</span><span class="datatypes">int</span><span>&nbsp;codepage) &nbsp;&nbsp;</span></li>
    <li><span>{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;USE_LIN_CHAR_SET; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;_lin_dst_size&nbsp;=&nbsp;pszSrc.size()*2; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;_lin_wdst&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;(std::</span><span class="keyword">nothrow</span><span>)&nbsp;</span><span class="datatypes">wchar_t</span><span>&nbsp;[&nbsp;_lin_dst_size]; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(&nbsp;_lin_wdst&nbsp;==&nbsp;0)&nbsp;</span><span class="keyword">return</span><span>&nbsp;std::wstring(); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;_lin_dst_size&nbsp;=&nbsp;MultiByteToWideChar(&nbsp;codepage,&nbsp;0,&nbsp;pszSrc.c_str(),&nbsp;pszSrc.length(),&nbsp;_lin_wdst,_lin_dst_size); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(&nbsp;_lin_dst_size&nbsp;==&nbsp;0) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">delete</span><span>[]&nbsp;_lin_wdst; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;std::wstring(); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;_lin_wdst[_lin_dst_size]&nbsp;=&nbsp;0; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;std::wstring&nbsp;result&nbsp;=&nbsp;_lin_wdst; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">delete</span><span>[]&nbsp;_lin_wdst; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;result; &nbsp;&nbsp;</span></li>
    <li><span>} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li><span class="preprocessor">#define&nbsp;_utf82w(&nbsp;pszSrc)&nbsp;_a2w_s(&nbsp;pszSrc,&nbsp;CP_UTF8) </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="preprocessor">#define&nbsp;_w2utf8(&nbsp;pszSrc)&nbsp;_w2a_s(&nbsp;pszSrc,&nbsp;CP_UTF8) </span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="preprocessor">#define&nbsp;_utf72w(&nbsp;pszSrc)&nbsp;_a2w_s(&nbsp;pszSrc,&nbsp;CP_UTF7) </span><span>&nbsp;&nbsp;</span></li>
    <li><span class="preprocessor">#define&nbsp;_w2utf7(&nbsp;pszSrc)&nbsp;_w2a_s(&nbsp;pszSrc,&nbsp;CP_UTF7) </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="comment">//&nbsp;导出的宏 </span><span>&nbsp;&nbsp;</span></li>
    <li><span class="preprocessor">#define&nbsp;a2w(pszSrc)&nbsp;_a2w_s(pszSrc,&nbsp;CP_ACP) </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="preprocessor">#define&nbsp;w2a(tcsSrc)&nbsp;_w2a_s(tcsSrc,&nbsp;CP_ACP) </span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="preprocessor">#else </span><span>&nbsp;&nbsp;</span></li>
    <li><span class="preprocessor">#define&nbsp;_w2a(&nbsp;pwcsSrc,&nbsp;codepage)&nbsp;(&nbsp;pwcsSrc&nbsp;==&nbsp;0?&nbsp;0:(&nbsp;\ </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;(_lin_dst&nbsp;=&nbsp;(</span><span class="datatypes">char</span><span>*)_alloca(&nbsp;((_lin_dst_size&nbsp;=&nbsp;(</span><span class="datatypes">int</span><span>)wcslen(&nbsp;pwcsSrc))+&nbsp;1)*3))==&nbsp;0?&nbsp;0&nbsp;:&nbsp;(\ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;(_lin_dst_size&nbsp;=&nbsp;WideCharToMultiByte(&nbsp;codepage,&nbsp;0,&nbsp;pwcsSrc,&nbsp;_lin_dst_size,&nbsp;_lin_dst,&nbsp;_lin_dst_size*3,&nbsp;0,&nbsp;0))==0?&nbsp;\ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;((_lin_dst[0]=0)==0&nbsp;?&nbsp;_lin_dst:0):&nbsp;(\ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;(_lin_dst[_lin_dst_size]&nbsp;=&nbsp;0)&nbsp;==&nbsp;0?&nbsp;_lin_dst&nbsp;:&nbsp;0)))) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li><span class="preprocessor">#define&nbsp;_a2w(&nbsp;pszSrc,&nbsp;codepage)&nbsp;(pszSrc&nbsp;==&nbsp;0?&nbsp;0&nbsp;:&nbsp;(\ </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;(_lin_wdst&nbsp;=&nbsp;(</span><span class="datatypes">wchar_t</span><span>*)_alloca(&nbsp;((_lin_dst_size&nbsp;=&nbsp;(</span><span class="datatypes">int</span><span>)strlen(&nbsp;pszSrc))&nbsp;+&nbsp;1)*2))&nbsp;==&nbsp;0?&nbsp;0&nbsp;:&nbsp;(\ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;(_lin_dst_size&nbsp;=&nbsp;MultiByteToWideChar(&nbsp;codepage,&nbsp;0,&nbsp;pszSrc,&nbsp;_lin_dst_size,&nbsp;_lin_wdst,_lin_dst_size&nbsp;+&nbsp;</span><span class="keyword">sizeof</span><span>(</span><span class="datatypes">wchar_t</span><span>)))&nbsp;==&nbsp;0?&nbsp;\ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;((_lin_wdst[0]=0)==0?&nbsp;_lin_wdst:0)&nbsp;:&nbsp;(\ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;(_lin_wdst[&nbsp;_lin_dst_size]&nbsp;=&nbsp;0)&nbsp;==&nbsp;0?&nbsp;_lin_wdst:&nbsp;0)))) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li><span class="preprocessor">#define&nbsp;_utf82w(&nbsp;pszSrc)&nbsp;_a2w(&nbsp;pszSrc,&nbsp;CP_UTF8) </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="preprocessor">#define&nbsp;_w2utf8(&nbsp;pszSrc)&nbsp;_w2a(&nbsp;pszSrc,&nbsp;CP_UTF8) </span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="preprocessor">#define&nbsp;_utf72w(&nbsp;pszSrc)&nbsp;_a2w(&nbsp;pszSrc,&nbsp;CP_UTF7) </span><span>&nbsp;&nbsp;</span></li>
    <li><span class="preprocessor">#define&nbsp;_w2utf7(&nbsp;pszSrc)&nbsp;_w2a(&nbsp;pszSrc,&nbsp;CP_UTF7) </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="comment">//&nbsp;导出的宏 </span><span>&nbsp;&nbsp;</span></li>
    <li><span class="preprocessor">#define&nbsp;a2w(pszSrc)&nbsp;_a2w(pszSrc,&nbsp;CP_ACP) </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="preprocessor">#define&nbsp;w2a(tcsSrc)&nbsp;_w2a(tcsSrc,&nbsp;CP_ACP) </span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="preprocessor">#endif </span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="preprocessor">#ifdef&nbsp;UNICODE </span><span>&nbsp;&nbsp;</span></li>
    <li><span class="preprocessor">#define&nbsp;a2t(pszSrc)&nbsp;a2w(pszSrc) </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="preprocessor">#define&nbsp;t2a(tcsSrc)&nbsp;w2a(tcsSrc) </span><span>&nbsp;&nbsp;</span></li>
    <li><span class="preprocessor">#define&nbsp;w2t(wcsSrc)&nbsp;wcsSrc; </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="preprocessor">#define&nbsp;t2w(tcsSrc)&nbsp;tcsSrc; </span><span>&nbsp;&nbsp;</span></li>
    <li><span class="preprocessor">#else </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="preprocessor">#define&nbsp;a2t(pszSrc)&nbsp;pszSrc </span><span>&nbsp;&nbsp;</span></li>
    <li><span class="preprocessor">#define&nbsp;t2a(tcsSrc)&nbsp;tcsSrc </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="preprocessor">#define&nbsp;w2t(wcsSrc)&nbsp;wta(wcsSrc) </span><span>&nbsp;&nbsp;</span></li>
    <li><span class="preprocessor">#define&nbsp;t2w(tcsSrc)&nbsp;a2w(tcsSrc) </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="preprocessor">#endif </span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="preprocessor">#define&nbsp;w2utf8(wcsSrc)&nbsp;_w2utf8(wcsSrc) </span><span>&nbsp;&nbsp;</span></li>
    <li><span class="preprocessor">#define&nbsp;utf82w(pszSrc)&nbsp;_utf82w(pszSrc) </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="preprocessor">#define&nbsp;w2utf7(wcsSrc)&nbsp;_w2utf7(wcsSrc) </span><span>&nbsp;&nbsp;</span></li>
    <li><span class="preprocessor">#define&nbsp;utf72w(pszSrc)&nbsp;_utf72w(pszSrc) </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li><span class="preprocessor">#define&nbsp;a2utf8(pszSrc)&nbsp;w2utf8(a2w(pszSrc)) </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="preprocessor">#define&nbsp;a2utf7(pszSrc)&nbsp;w2utf7(a2w(pszSrc)) </span><span>&nbsp;&nbsp;</span></li>
    <li><span class="preprocessor">#define&nbsp;utf82a(pszSrc)&nbsp;w2a(utf82w(pszSrc)) </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="preprocessor">#define&nbsp;utf72a(pszSrc)&nbsp;w2a(utf72w(pszSrc)) </span><span>&nbsp;&nbsp;</span></li>
    <li><span class="preprocessor">#define&nbsp;t2utf8(tcsSrc)&nbsp;w2utf8(tcsSrc) </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="preprocessor">#define&nbsp;t2utf7(tcsSrc)&nbsp;w2utf7(tcsSrc) </span><span>&nbsp;&nbsp;</span></li>
    <li><span class="preprocessor">#define&nbsp;utf82t(pszSrc)&nbsp;w2t(utf82w(pszSrc)) </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="preprocessor">#define&nbsp;utf72t(pszSrc)&nbsp;w2t(utf72w(pszSrc)) </span><span>&nbsp;&nbsp;</span></li>
</ol>
</div>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.panzhishi.com/classyk/article/cpp/103.html" /> 
	  <id>http://www.panzhishi.com/classyk/default.asp?id=103</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[单眼与距离识别]]></title>
	  <author>
		 <name>ClassyK</name>
		 <uri>http://www.panzhishi.com/classyk/</uri>
		 <email>classyk#vip.qq.com</email>
	  </author>
	  <category term="" scheme="http://www.panzhishi.com/classyk/default.asp?cateID=7" label="生活日志" /> 
	  <updated>2009-07-24T12:49:59+08:00</updated>
	  <published>2009-07-24T12:49:59+08:00</published>
		  <summary type="html"><![CDATA[<p>&nbsp;&nbsp;&nbsp; 前阵子有人说，人的单眼是没法测定物体和人的距离的。而对于此，我的想法是不同的。</p>
<p>&nbsp;&nbsp;&nbsp; 如果把人眼看成是范焦镜头（手机上大量使用的(不带AF功能的)摄像头大部分使用的范焦镜头），那么这个说法也许正确。然而人眼不是范焦的。</p>
<p>&nbsp;&nbsp;&nbsp; 想想DC的对焦功能，如果使用单反，镜头是更是有对焦环，对焦环上的刻度，会指示出当前对焦点和相机机身之间的距离。相机只需要使用一个镜头，就能识别到物品与相机的距离，关键原因就在于对焦，只有位于对焦点（及其附近）的物体，才会产生清晰的影像。对焦和精确对焦却又是不同。当使用大光圈的时候，精确对焦尤其重要，因为差以毫厘，就可能导致影像的模糊。</p>
<p>&nbsp;&nbsp;&nbsp; 人眼也是如此，我们看东西的时候，眼球需要对焦，才能看到清晰的画面。这个时侯，就算只用单眼，我们也能够察觉出物体与自己之间的距离及变化。</p>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.panzhishi.com/classyk/article/life/102.htm" /> 
	  <id>http://www.panzhishi.com/classyk/default.asp?id=102</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[delay load]]></title>
	  <author>
		 <name>ClassyK</name>
		 <uri>http://www.panzhishi.com/classyk/</uri>
		 <email>classyk#vip.qq.com</email>
	  </author>
	  <category term="" scheme="http://www.panzhishi.com/classyk/default.asp?cateID=4" label="C/C++" /> 
	  <updated>2009-04-20T23:15:11+08:00</updated>
	  <published>2009-04-20T23:15:11+08:00</published>
		  <summary type="html"><![CDATA[<p>&nbsp;&nbsp;&nbsp; 以前就想过delay load可以用来做一些偷懒工作，不过却一直没啥机会使用，真到可用之处，却忘了这个东西。</p>
<p>&nbsp;&nbsp;&nbsp; 昨晚突然想起来<img alt="" src="http://www.panzhishi.com/classyk/fckeditor/editor/images/smiley/qq2007/6.gif" />，我可以用这个功能来根据配置文件加载不同的摄像头sdk，今天在touchwin的代码上进行了试验，结果就是： 可行。</p>
<p>&nbsp;&nbsp;&nbsp; 这样也蛮不错，以后维护后台的时候，可以少维护2个版本了。</p>
<p>&nbsp;&nbsp;&nbsp; 而且，我不需要改动任何代码，仅仅只是修改了一下link选项<img alt="" src="http://www.panzhishi.com/classyk/fckeditor/editor/images/smiley/qq2007/13.gif" /></p>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.panzhishi.com/classyk/article/cpp/97.htm" /> 
	  <id>http://www.panzhishi.com/classyk/default.asp?id=97</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[binfstream]]></title>
	  <author>
		 <name>ClassyK</name>
		 <uri>http://www.panzhishi.com/classyk/</uri>
		 <email>classyk#vip.qq.com</email>
	  </author>
	  <category term="" scheme="http://www.panzhishi.com/classyk/default.asp?cateID=4" label="C/C++" /> 
	  <updated>2009-04-20T22:59:38+08:00</updated>
	  <published>2009-04-20T22:59:38+08:00</published>
		  <summary type="html"><![CDATA[<p>以前写了一个不知道放哪去了，就重写了一个:</p>
<div class="codeText">
<div class="codeHead">C++代码</div>
<ol class="dp-cpp">
    <li class="alt"><span><span>&nbsp;&nbsp;</span></span></li>
    <li><span class="keyword">class</span><span>&nbsp;binfstream&nbsp;:&nbsp;</span><span class="keyword">public</span><span>&nbsp;std::fstream &nbsp;&nbsp;</span></li>
    <li class="alt"><span>{ &nbsp;&nbsp;</span></li>
    <li><span class="keyword">public</span><span>: &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;一个比较丑陋的构造函数&nbsp;^_^ </span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;binfstream(&nbsp;</span><span class="keyword">const</span><span>&nbsp;</span><span class="datatypes">char</span><span>*&nbsp;file_name,&nbsp;</span><span class="datatypes">int</span><span>&nbsp;open_mode&nbsp;=&nbsp;std::fstream::in) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;std::fstream(file_name,&nbsp;open_mode&nbsp;|&nbsp;std::fstream::binary&nbsp;|&nbsp;(&nbsp;(open_mode&nbsp;&amp;&nbsp;std::fstream::out&nbsp;)&nbsp;==&nbsp;0&nbsp;?&nbsp;0&nbsp;:&nbsp;std::fstream::trunc)&nbsp;) &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;~binfstream() &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;input </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">template</span><span>&lt;</span><span class="keyword">typename</span><span>&nbsp;T&gt; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;binfstream&amp;&nbsp;operator&nbsp;&lt;&lt;&nbsp;(</span><span class="keyword">const</span><span>&nbsp;T&amp;&nbsp;t) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write(&nbsp;</span><span class="keyword">reinterpret_cast</span><span>&lt;</span><span class="keyword">const</span><span>&nbsp;</span><span class="datatypes">char</span><span>*&gt;(&amp;t),&nbsp;</span><span class="keyword">sizeof</span><span>&nbsp;T); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;*</span><span class="keyword">this</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;binfstream&amp;&nbsp;operator&nbsp;&lt;&lt;&nbsp;(&nbsp;</span><span class="keyword">const</span><span>&nbsp;</span><span class="datatypes">char</span><span>*&nbsp;t) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write(&nbsp;t,&nbsp;strlen(t)&nbsp;+&nbsp;1); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;*</span><span class="keyword">this</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;binfstream&amp;&nbsp;operator&nbsp;&lt;&lt;&nbsp;(&nbsp;</span><span class="keyword">const</span><span>&nbsp;std::string&nbsp;s) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;operator&nbsp;&lt;&lt;&nbsp;(&nbsp;s.c_str()); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;output </span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">template</span><span>&lt;</span><span class="keyword">typename</span><span>&nbsp;T&gt; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;binfstream&amp;&nbsp;operator&nbsp;&gt;&gt;&nbsp;(T&amp;&nbsp;t) &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;read(&nbsp;</span><span class="keyword">reinterpret_cast</span><span>&lt;</span><span class="datatypes">char</span><span>*&gt;(&amp;t),&nbsp;</span><span class="keyword">sizeof</span><span>&nbsp;T); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;*</span><span class="keyword">this</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;binfstream&amp;&nbsp;operator&nbsp;&gt;&gt;&nbsp;(&nbsp;std::string&nbsp;&amp;str) &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="datatypes">char</span><span>&nbsp;cur_char; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">while</span><span>(&nbsp;read(&nbsp;&amp;cur_char,&nbsp;</span><span class="keyword">sizeof</span><span>&nbsp;cur_char&nbsp;)&nbsp;) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(&nbsp;cur_char&nbsp;==&nbsp;0)&nbsp;</span><span class="keyword">break</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str.push_back(&nbsp;cur_char); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;*</span><span class="keyword">this</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li><span>};&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>使用自然是以简单为主:</p>
<div class="codeText">
<div class="codeHead">C++代码</div>
<ol class="dp-cpp">
    <li class="alt"><span><span class="preprocessor">#include&nbsp;&lt;iostream&gt; </span><span>&nbsp;&nbsp;</span></span></li>
    <li><span class="preprocessor">#include&nbsp;&lt;fstream&gt; </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="preprocessor">#include&nbsp;&lt;string&gt; </span><span>&nbsp;&nbsp;</span></li>
    <li><span class="preprocessor">#include&nbsp;&quot;binfstream.h&quot; </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li><span class="datatypes">int</span><span>&nbsp;main(&nbsp;</span><span class="datatypes">int</span><span>&nbsp;argc,&nbsp;</span><span class="datatypes">char</span><span>*&nbsp;argv[]) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>{ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;binfstream&nbsp;f(&nbsp;</span><span class="string">&quot;d:\\log.txt&quot;</span><span>,&nbsp;std::fstream::in&nbsp;|&nbsp;std::fstream::out); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;f&nbsp;&lt;&lt;&nbsp;3&nbsp;&lt;&lt;&nbsp;std::string(</span><span class="string">&quot;hello&quot;</span><span>)&nbsp;&lt;&lt;&nbsp;</span><span class="string">&quot;world&quot;</span><span>&nbsp;&lt;&lt;&nbsp;1.133; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="datatypes">int</span><span>&nbsp;i; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;std::string&nbsp;s1; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;std::string&nbsp;s2; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="datatypes">double</span><span>&nbsp;d; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;f.seekp(&nbsp;std::fstream::beg); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;f&nbsp;&gt;&gt;&nbsp;i&nbsp;&gt;&gt;&nbsp;s1&nbsp;&gt;&gt;&nbsp;s2&gt;&gt;&nbsp;d; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;std::cout&nbsp;&lt;&lt;&nbsp;i&nbsp;&lt;&lt;&nbsp;s1&nbsp;&lt;&lt;&nbsp;s2&nbsp;&lt;&lt;&nbsp;d; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;0; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>} &nbsp;&nbsp;</span></li>
</ol>
</div>
<p>其中operator &lt;&lt; 和 &gt;&gt; 并没有写为友元，主要是因为我。。想 偷懒</p>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.panzhishi.com/classyk/article/cpp/96.htm" /> 
	  <id>http://www.panzhishi.com/classyk/default.asp?id=96</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[getline]]></title>
	  <author>
		 <name>ClassyK</name>
		 <uri>http://www.panzhishi.com/classyk/</uri>
		 <email>classyk#vip.qq.com</email>
	  </author>
	  <category term="" scheme="http://www.panzhishi.com/classyk/default.asp?cateID=4" label="C/C++" /> 
	  <updated>2009-04-08T17:15:49+08:00</updated>
	  <published>2009-04-08T17:15:49+08:00</published>
		  <summary type="html"><![CDATA[<p>getline原来也可以用于做字符串分割，我太out了</p>
<div class="codeText">
<div class="codeHead">C++代码</div>
<ol class="dp-cpp">
    <li class="alt"><span><span>stringstream&nbsp;ss(&nbsp;input);&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></span></li>
    <li><span>string&nbsp;str;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">while</span><span>(&nbsp;!ss.eof())&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>{&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;getline(&nbsp;ss,&nbsp;str,&nbsp;</span><span class="string">','</span><span>);&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;results.push_back(&nbsp;str);&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>}&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li><span class="keyword">return</span><span>&nbsp;results.size();&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>&nbsp;</p>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.panzhishi.com/classyk/article/cpp/95.htm" /> 
	  <id>http://www.panzhishi.com/classyk/default.asp?id=95</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[cppe4x]]></title>
	  <author>
		 <name>ClassyK</name>
		 <uri>http://www.panzhishi.com/classyk/</uri>
		 <email>classyk#vip.qq.com</email>
	  </author>
	  <category term="" scheme="http://www.panzhishi.com/classyk/default.asp?cateID=21" label="CppE4X" /> 
	  <updated>2009-03-12T21:06:36+08:00</updated>
	  <published>2009-03-12T21:06:36+08:00</published>
		  <summary type="html"><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;源码已经上传到google code，以下是project链接 <a href="http://code.google.com/p/cppe4x"><span style="color: #ff6600">http://code.google.com/p/cppe4x</span></a>&nbsp;&nbsp;&nbsp;</p>
<div class="codeText">
<div class="codeHead">cppe4x简介:</div>
<ol class="dp-xml">
    <li class="alt"><span><span><font color="#5c5c5c">&nbsp;&nbsp;&nbsp; </font>cppe4x是一个简单的C++跨平台XML解析器，基于DOM和XPath方式实现，其目标是快速的构建xml应用。&nbsp; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;cppe4x非常适合快速的构建测试程序以及配置文件的读写。当前仅支持UTF8格式的XML文件。同时，cppe4x在Microsoft&nbsp;Windows平台下会自动进行utf8与ansi编码的双向转换。&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;cppe4x最初的目标是构建与ActionScript3?中的E4X语法类似的接口，但由于C++与AS3语法的巨大差异，目前的cppe4x无法完全实现该目标。尽管如此，cppe4x还是尽量的保持了操作的简洁和有效性。</span></li>
</ol>
</div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;这个xml解析器的代码并不长，但是前前后后却花了好几个月的时间，结构也数次调整。也正因如此，方知一个库的构建，是如此的困难。现在，依然有很多不满意的地方。程序和文档的完善，尚需时日。</p>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.panzhishi.com/classyk/article/94.htm" /> 
	  <id>http://www.panzhishi.com/classyk/default.asp?id=94</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[vs环境下，Cr&#101;ateProcess]]></title>
	  <author>
		 <name>ClassyK</name>
		 <uri>http://www.panzhishi.com/classyk/</uri>
		 <email>classyk#vip.qq.com</email>
	  </author>
	  <category term="" scheme="http://www.panzhishi.com/classyk/default.asp?cateID=4" label="C/C++" /> 
	  <updated>2009-03-08T22:23:22+08:00</updated>
	  <published>2009-03-08T22:23:22+08:00</published>
		  <summary type="html"><![CDATA[<p>&nbsp;&nbsp;&nbsp; 前几天完成了之前挂起来的一个半截子程序，其中有个功能是拦截console的输出并显示。在vc环境下运行程序（无论是Debug还是直接Run)，一切正常。但是单独去运行，他就失败了，拦截不了console的输出。</p>
<p>&nbsp;&nbsp;&nbsp; 查了半天也没查到问题所在，开始我想，会不会是vs下给了进程debug权限？于是我又写了代码把程序提高到了debug权限，结果很沮丧，问题依旧。</p>
<p>&nbsp;&nbsp;&nbsp; 后来又查了半天，胡乱试了一试，结果问题解决了</p>
<p>&nbsp;&nbsp;&nbsp; 原来这种情况下，CreateProcess要指定DETACHED_PROCESS参数。</p>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.panzhishi.com/classyk/article/cpp/89.htm" /> 
	  <id>http://www.panzhishi.com/classyk/default.asp?id=89</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[touchwin产品暂停开发]]></title>
	  <author>
		 <name>ClassyK</name>
		 <uri>http://www.panzhishi.com/classyk/</uri>
		 <email>classyk#vip.qq.com</email>
	  </author>
	  <category term="" scheme="http://www.panzhishi.com/classyk/default.asp?cateID=4" label="C/C++" /> 
	  <updated>2009-02-05T21:23:27+08:00</updated>
	  <published>2009-02-05T21:23:27+08:00</published>
		  <summary type="html"><![CDATA[<p>&nbsp;&nbsp; 听同事说，touchwin暂停开发，现在全力做另外一个产品</p>
<p>&nbsp;&nbsp; 过年前我还在忙着touchwin，结果呢，还没回公司，就说产品暂停了，或者说得好听点，这是个长期项目，随时要捡起来的。</p>
<p>&nbsp;&nbsp;&nbsp; disappointted</p>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.panzhishi.com/classyk/article/cpp/86.htm" /> 
	  <id>http://www.panzhishi.com/classyk/default.asp?id=86</id>
  </entry>	
		
</feed>
