﻿<?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++博客-股票数据格式转换软件，股票数据格式全方位揭秘，黑牛外汇交易系统（稳定盈利）一切尽在http://alantop.5166.info-随笔分类-C++</title><link>http://www.cppblog.com/alantop/category/1645.html</link><description>股票数据格式转换软件 http://alantop.5166.info 公布股票数据格式文档 稳定盈利的外汇交易系统黑牛外汇交易系统</description><language>zh-cn</language><lastBuildDate>Fri, 21 Dec 2007 04:08:26 GMT</lastBuildDate><pubDate>Fri, 21 Dec 2007 04:08:26 GMT</pubDate><ttl>60</ttl><item><title>VS2008 Team system 正式版下载和预览图</title><link>http://www.cppblog.com/alantop/archive/2007/11/26/37307.html</link><dc:creator>AlanTop</dc:creator><author>AlanTop</author><pubDate>Mon, 26 Nov 2007 05:10:00 GMT</pubDate><guid>http://www.cppblog.com/alantop/archive/2007/11/26/37307.html</guid><wfw:comment>http://www.cppblog.com/alantop/comments/37307.html</wfw:comment><comments>http://www.cppblog.com/alantop/archive/2007/11/26/37307.html#Feedback</comments><slash:comments>11</slash:comments><wfw:commentRss>http://www.cppblog.com/alantop/comments/commentRss/37307.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/alantop/services/trackbacks/37307.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: VS2008 Team system 正式版下载和预览图&nbsp;&nbsp;<a href='http://www.cppblog.com/alantop/archive/2007/11/26/37307.html'>阅读全文</a><img src ="http://www.cppblog.com/alantop/aggbug/37307.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/alantop/" target="_blank">AlanTop</a> 2007-11-26 13:10 <a href="http://www.cppblog.com/alantop/archive/2007/11/26/37307.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>大智慧新一代日线格式解析（c++源码）</title><link>http://www.cppblog.com/alantop/archive/2007/10/30/35509.html</link><dc:creator>AlanTop</dc:creator><author>AlanTop</author><pubDate>Tue, 30 Oct 2007 04:23:00 GMT</pubDate><guid>http://www.cppblog.com/alantop/archive/2007/10/30/35509.html</guid><wfw:comment>http://www.cppblog.com/alantop/comments/35509.html</wfw:comment><comments>http://www.cppblog.com/alantop/archive/2007/10/30/35509.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/alantop/comments/commentRss/35509.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/alantop/services/trackbacks/35509.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 大智慧新一代日线格式解析（c++源码）&nbsp;&nbsp;<a href='http://www.cppblog.com/alantop/archive/2007/10/30/35509.html'>阅读全文</a><img src ="http://www.cppblog.com/alantop/aggbug/35509.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/alantop/" target="_blank">AlanTop</a> 2007-10-30 12:23 <a href="http://www.cppblog.com/alantop/archive/2007/10/30/35509.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>大智慧2逐笔数据提取工具</title><link>http://www.cppblog.com/alantop/archive/2007/10/26/35274.html</link><dc:creator>AlanTop</dc:creator><author>AlanTop</author><pubDate>Fri, 26 Oct 2007 14:54:00 GMT</pubDate><guid>http://www.cppblog.com/alantop/archive/2007/10/26/35274.html</guid><wfw:comment>http://www.cppblog.com/alantop/comments/35274.html</wfw:comment><comments>http://www.cppblog.com/alantop/archive/2007/10/26/35274.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cppblog.com/alantop/comments/commentRss/35274.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/alantop/services/trackbacks/35274.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 大智慧新一代逐笔数据提取工具 (试用版本发布)&nbsp;&nbsp;<a href='http://www.cppblog.com/alantop/archive/2007/10/26/35274.html'>阅读全文</a><img src ="http://www.cppblog.com/alantop/aggbug/35274.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/alantop/" target="_blank">AlanTop</a> 2007-10-26 22:54 <a href="http://www.cppblog.com/alantop/archive/2007/10/26/35274.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>vc中的xml开发</title><link>http://www.cppblog.com/alantop/archive/2007/09/04/31546.html</link><dc:creator>AlanTop</dc:creator><author>AlanTop</author><pubDate>Tue, 04 Sep 2007 04:07:00 GMT</pubDate><guid>http://www.cppblog.com/alantop/archive/2007/09/04/31546.html</guid><wfw:comment>http://www.cppblog.com/alantop/comments/31546.html</wfw:comment><comments>http://www.cppblog.com/alantop/archive/2007/09/04/31546.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/alantop/comments/commentRss/31546.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/alantop/services/trackbacks/31546.html</trackback:ping><description><![CDATA[<p><strong>1. libxml是一个跨平台库. 基于C语言的xml解析器.</strong></p> <p>其主页和网上内容很多,这里整理一下.</p> <p>libxml源码示例:<a title="http://xmlsoft.org/examples/index.html" href="http://xmlsoft.org/examples/index.html">http://xmlsoft.org/examples/index.html</a></p> <p>libxml参考手册:<a title="http://xmlsoft.org/html/index.html" href="http://xmlsoft.org/html/index.html">http://xmlsoft.org/html/index.html</a></p> <p>主页: <a title="http://xmlsoft.org/" href="http://xmlsoft.org/">http://xmlsoft.org/</a></p> <p>一个很详细的教程:<a title="http://hi.baidu.com/%CE%DA%D1%BB%C3%F7/blog/item/06df91547c79171e3a29358e.html" href="http://hi.baidu.com/%CE%DA%D1%BB%C3%F7/blog/item/06df91547c79171e3a29358e.html"><a title="http://blog.chinaunix.net/u/14063/showart_98851.html" href="http://blog.chinaunix.net/u/14063/showart_98851.html">http://blog.chinaunix.net/u/14063/showart_98851.html</a></a></p> <p>&nbsp;</p> <p><strong>2. 利用msxml4.0 sp2解析xml</strong></p> <p><a title="http://blog.csdn.net/max2008/archive/2007/06/11/1647613.aspx" href="http://blog.csdn.net/max2008/archive/2007/06/11/1647613.aspx">http://blog.csdn.net/max2008/archive/2007/06/11/1647613.aspx</a></p> <p>&nbsp;</p> <p><strong>3.cmarkup</strong></p> <p><strong>Homepage: <a href="http://www.firstobject.com/">http://www.firstobject.com/</a> </strong></p> <p><a title="http://www.cnblogs.com/bingxuefly/archive/2007/04/23/724318.html" href="http://www.cnblogs.com/bingxuefly/archive/2007/04/23/724318.html">http://www.cnblogs.com/bingxuefly/archive/2007/04/23/724318.html</a></p><img src ="http://www.cppblog.com/alantop/aggbug/31546.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/alantop/" target="_blank">AlanTop</a> 2007-09-04 12:07 <a href="http://www.cppblog.com/alantop/archive/2007/09/04/31546.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>谷歌百度一起搜程序源码</title><link>http://www.cppblog.com/alantop/archive/2007/09/04/31523.html</link><dc:creator>AlanTop</dc:creator><author>AlanTop</author><pubDate>Tue, 04 Sep 2007 01:16:00 GMT</pubDate><guid>http://www.cppblog.com/alantop/archive/2007/09/04/31523.html</guid><wfw:comment>http://www.cppblog.com/alantop/comments/31523.html</wfw:comment><comments>http://www.cppblog.com/alantop/archive/2007/09/04/31523.html#Feedback</comments><slash:comments>15</slash:comments><wfw:commentRss>http://www.cppblog.com/alantop/comments/commentRss/31523.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/alantop/services/trackbacks/31523.html</trackback:ping><description><![CDATA[以前 都是在用网上找的google百度 或者其他之类的,发现经常不稳定.<br>所以 自己动手写了一个.<br><br>一直在用很爽.发上来 共享下. 用了这个程序后,明显发现google速度明显比百度慢.<br><br>源码:<a href="http://www.cppblog.com/Files/alantop/Dsearch20070904.rar">/Files/alantop/Dsearch20070904.rar</a><br>程序抓图:<br><img style="WIDTH: 567px; HEIGHT: 608px" height=608 alt="" src="http://www.cppblog.com/images/cppblog_com/alantop/dsearch.JPG" width=567 border=0><br>
<img src ="http://www.cppblog.com/alantop/aggbug/31523.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/alantop/" target="_blank">AlanTop</a> 2007-09-04 09:16 <a href="http://www.cppblog.com/alantop/archive/2007/09/04/31523.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个封装文件操作和目录操作的类</title><link>http://www.cppblog.com/alantop/archive/2007/08/15/30047.html</link><dc:creator>AlanTop</dc:creator><author>AlanTop</author><pubDate>Wed, 15 Aug 2007 00:23:00 GMT</pubDate><guid>http://www.cppblog.com/alantop/archive/2007/08/15/30047.html</guid><wfw:comment>http://www.cppblog.com/alantop/comments/30047.html</wfw:comment><comments>http://www.cppblog.com/alantop/archive/2007/08/15/30047.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cppblog.com/alantop/comments/commentRss/30047.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/alantop/services/trackbacks/30047.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 经常在项目中遇到文件和目录操作。拷贝，删除，移动，最讨厌的可能就是枚举了。  这里提供一个封装文件和目录的操作类。  &nbsp;  此类封装了一些高级的文件和目录操作。例如删除、建立、拷贝、移动、枚举文件和目录。  所有的错误处理都内置了。并且用bool值类型来表示其成功与否。如果失败，可以调用GetErrorMessage  函数得到CString类型的错误信息。  用法：这个类只需要建立CD...&nbsp;&nbsp;<a href='http://www.cppblog.com/alantop/archive/2007/08/15/30047.html'>阅读全文</a><img src ="http://www.cppblog.com/alantop/aggbug/30047.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/alantop/" target="_blank">AlanTop</a> 2007-08-15 08:23 <a href="http://www.cppblog.com/alantop/archive/2007/08/15/30047.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个不错的免费界面库</title><link>http://www.cppblog.com/alantop/archive/2007/07/31/29084.html</link><dc:creator>AlanTop</dc:creator><author>AlanTop</author><pubDate>Tue, 31 Jul 2007 08:31:00 GMT</pubDate><guid>http://www.cppblog.com/alantop/archive/2007/07/31/29084.html</guid><wfw:comment>http://www.cppblog.com/alantop/comments/29084.html</wfw:comment><comments>http://www.cppblog.com/alantop/archive/2007/07/31/29084.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/alantop/comments/commentRss/29084.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/alantop/services/trackbacks/29084.html</trackback:ping><description><![CDATA[<a href="http://www.gardenui.com/index.aspx">http://www.gardenui.com/index.aspx</a><br><br>界面库图片<br>对话框<br><img height=600 alt="" src="http://www.cppblog.com/images/cppblog_com/alantop/01.JPG" width=300 border=0><br><br>多文档<br><img height=768 alt="" src="http://www.cppblog.com/images/cppblog_com/alantop/02.JPG" width=988 border=0><br><br>单文档<br><img height=768 alt="" src="http://www.cppblog.com/images/cppblog_com/alantop/03.JPG" width=988 border=0><br>
<img src ="http://www.cppblog.com/alantop/aggbug/29084.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/alantop/" target="_blank">AlanTop</a> 2007-07-31 16:31 <a href="http://www.cppblog.com/alantop/archive/2007/07/31/29084.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>bitset::flip的含义和用法：</title><link>http://www.cppblog.com/alantop/archive/2007/07/11/27866.html</link><dc:creator>AlanTop</dc:creator><author>AlanTop</author><pubDate>Wed, 11 Jul 2007 06:12:00 GMT</pubDate><guid>http://www.cppblog.com/alantop/archive/2007/07/11/27866.html</guid><wfw:comment>http://www.cppblog.com/alantop/comments/27866.html</wfw:comment><comments>http://www.cppblog.com/alantop/archive/2007/07/11/27866.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/alantop/comments/commentRss/27866.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/alantop/services/trackbacks/27866.html</trackback:ping><description><![CDATA[<p>bitset::flip：反转所有位，或者指定的位。 <p>Toggles the value of all the bits in a bitset or toggles a single bit at a specified position. <p>&nbsp; <p>反转：原来是1，反转后就是0；如果原来是0，toggle后就是1. <p>不带参数调用，就是反转所有位。 <p>带参数，即是从右边数0开始数，反转第几位。（注意：两点 1是从右边数，2是从0开始） <p>&nbsp; <p>// bitset_flip.cpp<br>// compile with: /EHsc<br>#include &lt;bitset&gt;<br>#include &lt;iostream&gt;  <p>int main( )<br>{<br>&nbsp;&nbsp;&nbsp; using namespace std;<br>&nbsp;&nbsp;&nbsp; bitset&lt;5&gt; b1 ( 6 );  <p>&nbsp;&nbsp;&nbsp; cout &lt;&lt; "The collection of bits in the original bitset is: ( "<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;&lt; b1 &lt;&lt; " )" &lt;&lt; endl;  <p>&nbsp;&nbsp;&nbsp; bitset&lt;5&gt; fb1;<br>&nbsp;&nbsp;&nbsp; fb1 = b1.flip ( );  <p>&nbsp;&nbsp;&nbsp; cout &lt;&lt; "After flipping all the bits, the bitset becomes: ( "<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;&lt; fb1 &lt;&lt; " )" &lt;&lt; endl;  <p>&nbsp;&nbsp;&nbsp; bitset&lt;5&gt; f3b1;<br>&nbsp;&nbsp;&nbsp; f3b1 = b1.flip ( 0 );  <p>&nbsp;&nbsp;&nbsp; cout &lt;&lt; "After flipping the fourth bit, the bitset becomes: ( "<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;&lt; f3b1 &lt;&lt; " )" &lt;&lt; endl &lt;&lt; endl;  <p>&nbsp;&nbsp;&nbsp; bitset&lt;5&gt; b2;<br>&nbsp;&nbsp;&nbsp; int i;<br>&nbsp;&nbsp;&nbsp; for ( i = 0 ; i &lt;= 4 ; i++ )<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b2.flip(i);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; b2 &lt;&lt; "&nbsp; The bit flipped is in position "<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;&lt; i &lt;&lt; ".\n";<br>&nbsp;&nbsp;&nbsp; }<br>} <p>&nbsp; <p>运行结果： <p><a href="http://www.cppblog.com/images/cppblog_com/alantop/WindowsLiveWriter/bitsetflip_C6F3/flip.jpg" atomicselection="true"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="229" alt="flip" src="http://www.cppblog.com/images/cppblog_com/alantop/WindowsLiveWriter/bitsetflip_C6F3/flip_thumb.jpg" width="686" border="0"></a><img src ="http://www.cppblog.com/alantop/aggbug/27866.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/alantop/" target="_blank">AlanTop</a> 2007-07-11 14:12 <a href="http://www.cppblog.com/alantop/archive/2007/07/11/27866.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何提取数字和字符混合的字符串</title><link>http://www.cppblog.com/alantop/archive/2007/07/11/27848.html</link><dc:creator>AlanTop</dc:creator><author>AlanTop</author><pubDate>Wed, 11 Jul 2007 02:15:00 GMT</pubDate><guid>http://www.cppblog.com/alantop/archive/2007/07/11/27848.html</guid><wfw:comment>http://www.cppblog.com/alantop/comments/27848.html</wfw:comment><comments>http://www.cppblog.com/alantop/archive/2007/07/11/27848.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/alantop/comments/commentRss/27848.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/alantop/services/trackbacks/27848.html</trackback:ping><description><![CDATA[<p>#include &lt;stdlib.h&gt;<br>#include &lt;stdio.h&gt;  <p>int main( void )<br>{<br>&nbsp;&nbsp;&nbsp; char&nbsp;&nbsp; *string, *stopstring;<br>&nbsp;&nbsp;&nbsp; long&nbsp;&nbsp; l;  <p>&nbsp;&nbsp;&nbsp; string = "10110134";<br>&nbsp;&nbsp;&nbsp; l = strtol( string, &amp;stopstring, 10 );<br>&nbsp;&nbsp;&nbsp; printf( "string = %s\n", string );<br>&nbsp;&nbsp;&nbsp; printf("&nbsp;&nbsp; strtol = %ld\n", l );<br>&nbsp;&nbsp;&nbsp; printf("&nbsp;&nbsp; Stopped scan at: %s\n\n", stopstring );<br>}  <img src ="http://www.cppblog.com/alantop/aggbug/27848.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/alantop/" target="_blank">AlanTop</a> 2007-07-11 10:15 <a href="http://www.cppblog.com/alantop/archive/2007/07/11/27848.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用bitset做十进制、二进制的转换</title><link>http://www.cppblog.com/alantop/archive/2007/07/11/27845.html</link><dc:creator>AlanTop</dc:creator><author>AlanTop</author><pubDate>Wed, 11 Jul 2007 01:47:00 GMT</pubDate><guid>http://www.cppblog.com/alantop/archive/2007/07/11/27845.html</guid><wfw:comment>http://www.cppblog.com/alantop/comments/27845.html</wfw:comment><comments>http://www.cppblog.com/alantop/archive/2007/07/11/27845.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/alantop/comments/commentRss/27845.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/alantop/services/trackbacks/27845.html</trackback:ping><description><![CDATA[<p>例子一、十进制转换二进制  <p>// bitset_bitset.cpp<br>// compile with: /EHsc<br>#include &lt;bitset&gt;<br>#include &lt;iostream&gt;  <p>int main( )<br>{<br>&nbsp;&nbsp;&nbsp; // Using the default constructor<br>&nbsp;&nbsp;&nbsp; using namespace std;  <p>&nbsp;&nbsp;&nbsp; // Using the second member function<br>&nbsp;&nbsp;&nbsp; bitset&lt;20&gt; b1 ( 5 );<br>&nbsp;&nbsp;&nbsp; cout &lt;&lt; "The set of bits in bitset&lt;5&gt; b1( 5 ) is: ( "<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;&lt; b1 &lt;&lt; " )." &lt;&lt; endl;  <p>}</p> <p>&nbsp;</p> <p>例子二、二进制转换十进制  <p>#include &lt;bitset&gt;<br>#include &lt;iostream&gt;  <p>void main()<br>{<br>&nbsp;&nbsp;&nbsp; using namespace std;<br>&nbsp;&nbsp;&nbsp; string bitval5 ("11110011011");<br>&nbsp;&nbsp;&nbsp; int length = strlen("11110011011");<br>&nbsp;&nbsp;&nbsp; bitset&lt;11&gt; b5 ( bitval5);<br>&nbsp;&nbsp;&nbsp; cout &lt;&lt; b5 &lt;&lt; endl;<br>&nbsp;&nbsp;&nbsp; cout &lt;&lt; b5.to_ulong( ) &lt;&lt; endl;<br>}  <p>&nbsp; <p>例子三、支持指针<br>#include &lt;bitset&gt;<br>#include &lt;iostream&gt;  <p>void main()<br>{<br>&nbsp;&nbsp;&nbsp; using namespace std;<br>&nbsp;&nbsp;&nbsp; char p[] = "11110011011";  <p>&nbsp;&nbsp;&nbsp; bitset&lt;50&gt; b5 ( p);<br>&nbsp;&nbsp;&nbsp; cout &lt;&lt; b5 &lt;&lt; endl;<br>&nbsp;&nbsp;&nbsp; cout &lt;&lt; b5.to_ulong( ) &lt;&lt; endl;<br>} <img src ="http://www.cppblog.com/alantop/aggbug/27845.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/alantop/" target="_blank">AlanTop</a> 2007-07-11 09:47 <a href="http://www.cppblog.com/alantop/archive/2007/07/11/27845.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>explicit的用法</title><link>http://www.cppblog.com/alantop/archive/2007/07/10/27826.html</link><dc:creator>AlanTop</dc:creator><author>AlanTop</author><pubDate>Tue, 10 Jul 2007 11:50:00 GMT</pubDate><guid>http://www.cppblog.com/alantop/archive/2007/07/10/27826.html</guid><wfw:comment>http://www.cppblog.com/alantop/comments/27826.html</wfw:comment><comments>http://www.cppblog.com/alantop/archive/2007/07/10/27826.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/alantop/comments/commentRss/27826.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/alantop/services/trackbacks/27826.html</trackback:ping><description><![CDATA[<p>explicit用法，防止对象隐式被转换。
<p>例子一：隐式转换
<p>&nbsp;</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;C<br>{<br></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:</span><span style="COLOR: #000000">&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;C&nbsp;(&nbsp;int&nbsp;j&nbsp;);<br>&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;i;<br>};<br>C</span><span style="COLOR: #000000">::</span><span style="COLOR: #000000">C&nbsp;(int&nbsp;j)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;j;<br>}<br>int&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;C&nbsp;c(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">5被隐式转换</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">}&nbsp;</span></div>
<p>&nbsp;
<p>&nbsp;
<p>&nbsp;</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">c&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">&nbsp;&nbsp;相当于<br><br><br>C&nbsp;temp(</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;实例化一个临时对象,</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">c&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;temp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;用&nbsp;=&nbsp;赋值</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">temp</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">C</span><span style="COLOR: #000000">::~</span><span style="COLOR: #000000">C();&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;temp&nbsp;的析构函数被激活<br></span></div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>如果类内的成员是一个指针，这种隐式转换是很危险的。为了防止这种隐式转换，我们把&nbsp;&nbsp;&nbsp; C ( int j ); 改写为explicit &nbsp;&nbsp;&nbsp; C ( int j );即可。</p>
<p>&nbsp;</p>
<p>这下编译的时候，会不允许这种隐式的转换，出现如下提示：</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">Compiling</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/dot.gif"></span><span style="COLOR: #000000"><br>test</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">cpp<br>D</span><span style="COLOR: #000000">:</span><span style="COLOR: #000000">\DATUM\DATUM\PROJECT\Test_muable\test</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">cpp(</span><span style="COLOR: #000000">14</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">:</span><span style="COLOR: #000000">&nbsp;error&nbsp;C2679</span><span style="COLOR: #000000">:</span><span style="COLOR: #000000">&nbsp;binary&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">:</span><span style="COLOR: #000000">&nbsp;no&nbsp;operator&nbsp;</span><span style="COLOR: #008080">defined</span><span style="COLOR: #000000">&nbsp;which&nbsp;takes&nbsp;a&nbsp;right</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">hand&nbsp;operand&nbsp;of&nbsp;type&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">const&nbsp;int</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;(or&nbsp;there&nbsp;is&nbsp;no&nbsp;acceptable&nbsp;conversion)<br>Error&nbsp;executing&nbsp;cl</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">exe</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">&nbsp;<br><br>Test_muable</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">exe&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;error(s)</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;warning(s)&nbsp;<br></span></div>
<img src ="http://www.cppblog.com/alantop/aggbug/27826.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/alantop/" target="_blank">AlanTop</a> 2007-07-10 19:50 <a href="http://www.cppblog.com/alantop/archive/2007/07/10/27826.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>stringstream的用法</title><link>http://www.cppblog.com/alantop/archive/2007/07/10/27823.html</link><dc:creator>AlanTop</dc:creator><author>AlanTop</author><pubDate>Tue, 10 Jul 2007 11:07:00 GMT</pubDate><guid>http://www.cppblog.com/alantop/archive/2007/07/10/27823.html</guid><wfw:comment>http://www.cppblog.com/alantop/comments/27823.html</wfw:comment><comments>http://www.cppblog.com/alantop/archive/2007/07/10/27823.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/alantop/comments/commentRss/27823.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/alantop/services/trackbacks/27823.html</trackback:ping><description><![CDATA[<p>stringstream通常是用来做数据转换的。</p>
<p>相比c库的转换，它更加安全，自动和直接。</p>
<p>&nbsp;</p>
<p>例子一：基本数据类型转换例子 int转string</p>
<p>&nbsp;</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008000">#</span><span style="COLOR: #008000">include&nbsp;&lt;string&gt;</span><span style="COLOR: #008000"><br>#</span><span style="COLOR: #008000">include&nbsp;&lt;sstream&gt;</span><span style="COLOR: #008000"><br>#</span><span style="COLOR: #008000">include&nbsp;&lt;iostream&gt;&nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000"><br>int&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;std</span><span style="COLOR: #000000">::</span><span style="COLOR: #000000">stringstream&nbsp;stream;<br>&nbsp;&nbsp;&nbsp;&nbsp;std</span><span style="COLOR: #000000">::</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;result;<br>&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1000</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;stream&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;i;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">将int输入流</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;stream&nbsp;</span><span style="COLOR: #000000">&gt;&gt;</span><span style="COLOR: #000000">&nbsp;result;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">从stream中抽取前面插入的int值</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;std</span><span style="COLOR: #000000">::</span><span style="COLOR: #000000">cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;result&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;std</span><span style="COLOR: #000000">::</span><span style="COLOR: #000000">endl;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;print&nbsp;the&nbsp;string&nbsp;"1000"</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">}&nbsp;<br></span></div>
<p>&nbsp;
<p>&nbsp;</p>
<p>运行结果：</p>
<p><a href="http://www.cppblog.com/images/cppblog_com/alantop/WindowsLiveWriter/stringstream_10C06/001.jpg" atomicselection="true"><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=94 alt=001 src="http://www.cppblog.com/images/cppblog_com/alantop/WindowsLiveWriter/stringstream_10C06/001_thumb.jpg" width=470 border=0></a> </p>
<p>&nbsp;</p>
<p>例子二：除了基本类型的转换，也支持char *的转换。</p>
<p>&nbsp;</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008000">#</span><span style="COLOR: #008000">include&nbsp;&lt;sstream&gt;</span><span style="COLOR: #008000"><br>#</span><span style="COLOR: #008000">include&nbsp;&lt;iostream&gt;&nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000"><br>int&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;std</span><span style="COLOR: #000000">::</span><span style="COLOR: #000000">stringstream&nbsp;stream;<br>&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;result[</span><span style="COLOR: #000000">8</span><span style="COLOR: #000000">]&nbsp;;<br>&nbsp;&nbsp;&nbsp;&nbsp;stream&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">8888</span><span style="COLOR: #000000">;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">向stream中插入8888</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;stream&nbsp;</span><span style="COLOR: #000000">&gt;&gt;</span><span style="COLOR: #000000">&nbsp;result;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">抽取stream中的值到result</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;std</span><span style="COLOR: #000000">::</span><span style="COLOR: #000000">cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;result&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;std</span><span style="COLOR: #000000">::</span><span style="COLOR: #000000">endl;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;屏幕显示&nbsp;"8888"</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">}&nbsp;<br></span></div>
<p>&nbsp;
<p>&nbsp;
<p><a href="http://www.cppblog.com/images/cppblog_com/alantop/WindowsLiveWriter/stringstream_10C06/002.jpg" atomicselection="true"><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=81 alt=002 src="http://www.cppblog.com/images/cppblog_com/alantop/WindowsLiveWriter/stringstream_10C06/002_thumb.jpg" width=479 border=0></a>
<p>&nbsp;
<p>例子三：再进行多次转换的时候，必须调用stringstream的成员函数clear().
<p>&nbsp;</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008000">#</span><span style="COLOR: #008000">include&nbsp;&lt;sstream&gt;</span><span style="COLOR: #008000"><br>#</span><span style="COLOR: #008000">include&nbsp;&lt;iostream&gt;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">int&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;std</span><span style="COLOR: #000000">::</span><span style="COLOR: #000000">stringstream&nbsp;stream;<br>&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;first</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;second;<br>&nbsp;&nbsp;&nbsp;&nbsp;stream</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">456</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">插入字符串</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;stream&nbsp;</span><span style="COLOR: #000000">&gt;&gt;</span><span style="COLOR: #000000">&nbsp;first;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">转换成int</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;std</span><span style="COLOR: #000000">::</span><span style="COLOR: #000000">cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;first&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;std</span><span style="COLOR: #000000">::</span><span style="COLOR: #000000">endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;stream</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">clear();&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">在进行多次转换前，必须清除stream</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;stream&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">插入bool值</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;stream&nbsp;</span><span style="COLOR: #000000">&gt;&gt;</span><span style="COLOR: #000000">&nbsp;second;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">提取出int</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;std</span><span style="COLOR: #000000">::</span><span style="COLOR: #000000">cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;second&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;std</span><span style="COLOR: #000000">::</span><span style="COLOR: #000000">endl;<br>}&nbsp;</span></div>
<p>&nbsp;
<p>运行clear的结果
<p><a href="http://www.cppblog.com/images/cppblog_com/alantop/WindowsLiveWriter/stringstream_10C06/003.jpg" atomicselection="true"><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=101 alt=003 src="http://www.cppblog.com/images/cppblog_com/alantop/WindowsLiveWriter/stringstream_10C06/003_thumb.jpg" width=485 border=0></a>
<p>没有运行clear的结果
<p><a href="http://www.cppblog.com/images/cppblog_com/alantop/WindowsLiveWriter/stringstream_10C06/004.jpg" atomicselection="true"><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=94 alt=004 src="http://www.cppblog.com/images/cppblog_com/alantop/WindowsLiveWriter/stringstream_10C06/004_thumb.jpg" width=484 border=0></a></p>
<img src ="http://www.cppblog.com/alantop/aggbug/27823.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/alantop/" target="_blank">AlanTop</a> 2007-07-10 19:07 <a href="http://www.cppblog.com/alantop/archive/2007/07/10/27823.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>mutable的用法</title><link>http://www.cppblog.com/alantop/archive/2007/07/10/27818.html</link><dc:creator>AlanTop</dc:creator><author>AlanTop</author><pubDate>Tue, 10 Jul 2007 09:19:00 GMT</pubDate><guid>http://www.cppblog.com/alantop/archive/2007/07/10/27818.html</guid><wfw:comment>http://www.cppblog.com/alantop/comments/27818.html</wfw:comment><comments>http://www.cppblog.com/alantop/archive/2007/07/10/27818.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/alantop/comments/commentRss/27818.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/alantop/services/trackbacks/27818.html</trackback:ping><description><![CDATA[<p>很多人看到这个c++关键字很迷茫。不知道怎么使用。</p>
<p>先简要说明一下，这个关键字只能用于非静态和非常量数据成员。如果一个类的成员被指定为mutable类型，那么调用const成员函数就可以为这个声明为mutalbe类型的成员赋值。</p>
<p>下面看一个例子：<br></p>
<p>&#160;</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;A<br>{<br></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;bool&nbsp;flag;<br>&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;test()&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flag&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>};&nbsp;<br><br>void&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;A&nbsp;a;<br>&nbsp;&nbsp;&nbsp;&nbsp;a</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">test();<br>}&nbsp;<br></span></div>
<p><br><br>放在编译器下，出现如下错误：<br><br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">--------------------</span><span style="COLOR: #000000">Configuration</span><span style="COLOR: #000000">:</span><span style="COLOR: #000000">&nbsp;Test_muable&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;Win32&nbsp;Debug</span><span style="COLOR: #000000">--------------------</span><span style="COLOR: #000000"><br>Compiling</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/dot.gif"></span><span style="COLOR: #000000"><br>test</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">cpp<br>D</span><span style="COLOR: #000000">:</span><span style="COLOR: #000000">\Datum\Datum\Project\Test_muable\test</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">cpp(</span><span style="COLOR: #000000">7</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">:</span><span style="COLOR: #000000">&nbsp;error&nbsp;C2166</span><span style="COLOR: #000000">:</span><span style="COLOR: #000000">&nbsp;l</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">value&nbsp;specifies&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">object</span><span style="COLOR: #000000"><br>Error&nbsp;executing&nbsp;cl</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">exe</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">&nbsp;<br><br>Test_muable</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">exe&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;error(s)</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;warning(s)&nbsp;<br></span></div>
<p>&nbsp;
<p>看mutable的定义，知道只需把 flag类型前加mutable即可。</p>
<img src ="http://www.cppblog.com/alantop/aggbug/27818.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/alantop/" target="_blank">AlanTop</a> 2007-07-10 17:19 <a href="http://www.cppblog.com/alantop/archive/2007/07/10/27818.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>c++读写文件和测试程序运行时间的例子</title><link>http://www.cppblog.com/alantop/archive/2007/07/09/27739.html</link><dc:creator>AlanTop</dc:creator><author>AlanTop</author><pubDate>Mon, 09 Jul 2007 07:05:00 GMT</pubDate><guid>http://www.cppblog.com/alantop/archive/2007/07/09/27739.html</guid><wfw:comment>http://www.cppblog.com/alantop/comments/27739.html</wfw:comment><comments>http://www.cppblog.com/alantop/archive/2007/07/09/27739.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/alantop/comments/commentRss/27739.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/alantop/services/trackbacks/27739.html</trackback:ping><description><![CDATA[<p>例子完整代码：<a title="http://zhmster.googlepages.com/ReadFile.rar" href="http://zhmster.googlepages.com/ReadFile.rar">http://zhmster.googlepages.com/ReadFile.rar</a></p> <p>例子功能简介：程序中google.dic是我的google输入法的词库。</p> <p>本段代码功能：就是把这个文件重新按照词频排序。把词频高的放在前面。</p> <p>&nbsp;</p> <p>代码是我一个学生作品：我做了小部分修改。</p> <p>&nbsp;</p> <p>代码演示了如下的技术：</p> <p>1. c++读写文件</p> <p>2. 如何测试一个程序的运行时间。程序中calctime类可以复用。大家只要在程序开始声明一下即可。</p> <p>3. 重载str_line这个类的&lt;操作符。以此可以利用链表的排序函数来排序。</p> <p>&nbsp;</p> <p>#include &lt;list&gt;<br>#include &lt;string&gt;<br>#include &lt;iostream&gt;<br>#include &lt;fstream&gt;&nbsp;&nbsp; <br>#include &lt;algorithm&gt;<br>#include &lt;stdio.h&gt;<br>#include &lt;time.h&gt;  <p>using namespace std; <br>#pragma warning ( disable : 4786 )  <p>struct str_line <br>{<br>&nbsp;&nbsp;&nbsp; string str_first;<br>&nbsp;&nbsp;&nbsp; int int_second;<br>&nbsp;&nbsp;&nbsp; char str_third[1000];<br>&nbsp;&nbsp;&nbsp; bool operator &lt; ( str_line strline_other)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if( int_second &lt; strline_other.int_second)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return true;<br>&nbsp;&nbsp;&nbsp; }<br>} strline;  <p>class calctime<br>{<br>public:<br>&nbsp;&nbsp;&nbsp; clock_t start, finish;<br>&nbsp;&nbsp;&nbsp; double duration;<br>&nbsp;&nbsp;&nbsp; void showResult()<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; duration = (double)(finish - start) / CLOCKS_PER_SEC;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf( "%.5f seconds\n", duration );<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; calctime()<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; start = clock();<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; ~calctime()<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; finish = clock();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; showResult();<br>&nbsp;&nbsp;&nbsp; }<br>};  <p>void main()<br>{  <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; calctime calc;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ifstream in_file("google.dic");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ofstream out_file("out.txt");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; list&lt;str_line&gt; save_date_list;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while ( in_file&gt;&gt;strline.str_first <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&amp; in_file&gt;&gt;strline.int_second<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&amp; in_file.getline(strline.str_third,1000))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; save_date_list.push_back(strline);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; save_date_list.sort();&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; list&lt;str_line&gt;::iterator iter = save_date_list.begin(); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for( ; iter!= save_date_list.end(); iter++ )<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //str_line strlineTemp = *iter;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out_file&lt;&lt; iter-&gt;str_first &lt;&lt;"&nbsp;&nbsp; "<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;&lt; iter-&gt;int_second &lt;&lt;"&nbsp;&nbsp; "<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;&lt; iter-&gt;str_third &lt;&lt; "\n";&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }  <p>}  <img src ="http://www.cppblog.com/alantop/aggbug/27739.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/alantop/" target="_blank">AlanTop</a> 2007-07-09 15:05 <a href="http://www.cppblog.com/alantop/archive/2007/07/09/27739.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>由浅入深，举例讲解RPC（一）</title><link>http://www.cppblog.com/alantop/archive/2007/07/09/27727.html</link><dc:creator>AlanTop</dc:creator><author>AlanTop</author><pubDate>Mon, 09 Jul 2007 04:41:00 GMT</pubDate><guid>http://www.cppblog.com/alantop/archive/2007/07/09/27727.html</guid><wfw:comment>http://www.cppblog.com/alantop/comments/27727.html</wfw:comment><comments>http://www.cppblog.com/alantop/archive/2007/07/09/27727.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/alantop/comments/commentRss/27727.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/alantop/services/trackbacks/27727.html</trackback:ping><description><![CDATA[&nbsp;
<p><span>关于</span><span>RPC</span><span>的文章很多，但是系统讲解的很少。下面我将写一个系列报道。用代码和论述来把</span><span>rpc</span><span>来讲讲清楚。</span></p>
<p><span>这篇就是开始第一篇了。</span></p>
<p>&nbsp;</p>
<p><span>由于工作比较忙。我们抽出一个星期的时间，有时间会写一点。把这个系列写完。所以，有可能每个系列都比较短些。</span></p>
<p><span>从最基本的讲起，让大家彻底明白</span><span>RPC.</span></p>
<p>&nbsp;</p>
<p><span>好了废话不多说了。正是开始。</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span>首先，你要用</span><span>RPC</span><span>，必须先搞清楚什么是</span><span>IDL.</span></p>
<p>&nbsp;</p>
<p><span>Rpc</span><span>是什么？</span><span> </span></p>
<p><span><a href="http://www.cppblog.com/alantop/archive/2007/07/09/27717.html">http://www.cppblog.com/alantop/archive/2007/07/09/27717.html</a></span></p>
<p><span>IDL</span><span>是什么？</span></p>
<p><span><a href="http://www.cppblog.com/alantop/archive/2007/07/09/27725.html">http://www.cppblog.com/alantop/archive/2007/07/09/27725.html</a> </span></p>
<p>&nbsp;</p>
<p><span>下来，举个例子。怎么样把一个标准程序改成用</span><span>IDL</span><span>语言写的程序。</span></p>
<p>&nbsp;</p>
<p><span>这是一个标准程序。</span></p>
<table cellSpacing=0 cellPadding=0 border=1>
    <tbody>
        <tr>
            <td vAlign=top width=568>
            <p><span>// File Standalone.cpp</span></p>
            <p><span>#include &lt;iostream&gt;</span></p>
            <p>&nbsp;</p>
            <p><span>// Future server function.</span></p>
            <p><span>void Output(const char* szOutput)</span></p>
            <p><span>{</span></p>
            <p><span><span>&nbsp;&nbsp; </span>std::cout &lt;&lt; szOutput &lt;&lt; std::endl;</span></p>
            <p><span>}</span></p>
            <p>&nbsp;</p>
            <p><span>int main()</span></p>
            <p><span>{</span></p>
            <p><span><span>&nbsp;&nbsp; </span>// Future client call.</span></p>
            <p><span><span>&nbsp;&nbsp; </span>Output("Hello Lonely World!");</span></p>
            <p><span>}</span></p>
            </td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<p><span>下来看我们怎么把它改为一个标准</span><span>IDL</span><span>语言的程序</span></p>
<p><span>用</span><span>IDL</span><span>语言定义接口：</span></p>
<table cellSpacing=0 cellPadding=0 border=1>
    <tbody>
        <tr>
            <td vAlign=top width=568>
            <p><span>// File Example1.idl</span></p>
            <p><span>[</span></p>
            <p><span><span>&nbsp;&nbsp; </span>// A unique identifier that distinguishes this</span></p>
            <p><span><span>&nbsp;&nbsp; </span>// interface from other interfaces.</span></p>
            <p><span><span>&nbsp;&nbsp; </span>uuid(00000001-EAF3-4A7A-A0F2-BCE4C30DA77E),</span></p>
            <p>&nbsp;</p>
            <p><span><span>&nbsp;&nbsp; </span>// This is version 1.0 of this interface.</span></p>
            <p><span><span>&nbsp;&nbsp; </span>version(1.0),</span></p>
            <p>&nbsp;</p>
            <p><span><span>&nbsp;&nbsp; </span>// This interface will use an implicit binding</span></p>
            <p><span><span>&nbsp;&nbsp; </span>// handle named hExample1Binding.</span></p>
            <p><span><span>&nbsp;&nbsp; </span>implicit_handle(handle_t hExample1Binding)</span></p>
            <p><span>]</span></p>
            <p><span>interface Example1 // The interface is named Example1</span></p>
            <p><span>{</span></p>
            <p><span><span>&nbsp;&nbsp; </span>// A function that takes a zero-terminated string.</span></p>
            <p><span><span>&nbsp;&nbsp; </span>void Output(</span></p>
            <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>[in, string] const char* szOutput);</span></p>
            <p><span>}</span></p>
            </td>
        </tr>
    </tbody>
</table>
<p><span>上面这个文件是我们用</span><span>idl</span><span>语言定义的，我们定义了一个接口</span><span>Example1, </span><span>它带有</span><span>uuid</span><span>和</span><span>version. </span><span>这个接口里定义了一个函数</span><span>Output.</span></p>
<p>&nbsp;</p>
<p><span>UUID</span><span>是什么？</span></p>
<p><span><a href="http://www.cppblog.com/alantop/archive/2007/07/09/27726.html">http://www.cppblog.com/alantop/archive/2007/07/09/27726.html</a> </span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span>接口的</span><span>implicit_handle</span><span>属性，我们后面再讨论。</span></p>
<p>&nbsp;</p>
<p><span>接下来干什么呢？</span></p>
<p><span>我们为了在程序中使用</span><span>idl</span><span>，必须通过通过编译器（</span><span>midl.exe</span><span>）把它翻译成客户代理和服务器存根，</span> <span>代理和存根将在后面被我们的编译器（</span><span>windows</span><span>平台下的</span><span>cl.exe</span><span>）所使用。</span></p>
<p>&nbsp;<br></p>
<p><img height=150 alt="" src="http://www.cppblog.com/images/cppblog_com/alantop/rpcintro1_2.gif" width=363 border=0></p>
<p>&nbsp;</p>
<p><span>改好的服务器端程序：</span></p>
<table cellSpacing=0 cellPadding=0 border=1>
    <tbody>
        <tr>
            <td vAlign=top width=568>
            <p><span>// File Example1Server.cpp</span></p>
            <p><span>#include &lt;iostream&gt;</span></p>
            <p><span>#include "Example1.h"</span></p>
            <p>&nbsp;</p>
            <p><span>// Server function.</span></p>
            <p><span>void Output(const char* szOutput)</span></p>
            <p><span>{</span></p>
            <p><span><span>&nbsp;&nbsp; </span>std::cout &lt;&lt; szOutput &lt;&lt; std::endl;</span></p>
            <p><span>}</span></p>
            <p>&nbsp;</p>
            <p><span>int main()</span></p>
            <p><span>{</span></p>
            <p><span><span>&nbsp;&nbsp; </span>RPC_STATUS status;</span></p>
            <p>&nbsp;</p>
            <p><span><span>&nbsp;&nbsp; </span>// Uses the protocol combined with the endpoint for receiving</span></p>
            <p><span><span>&nbsp;&nbsp; </span>// remote procedure calls.</span></p>
            <p><span><span>&nbsp;&nbsp; </span>status = RpcServerUseProtseqEp(</span></p>
            <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>reinterpret_cast&lt;unsigned char*&gt;("ncacn_ip_tcp"), // Use TCP/IP</span></p>
            <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>// protocol.</span></p>
            <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>RPC_C_PROTSEQ_MAX_REQS_DEFAULT, // Backlog queue length for TCP/IP.</span></p>
            <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>reinterpret_cast&lt;unsigned char*&gt;("4747"), // TCP/IP port to use.</span></p>
            <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>NULL); // No security.</span></p>
            <p>&nbsp;</p>
            <p><span><span>&nbsp;&nbsp; </span>if (status)</span></p>
            <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>exit(status);</span></p>
            <p>&nbsp;</p>
            <p><span><span>&nbsp;&nbsp; </span>// Registers the Example1 interface.</span></p>
            <p><span><span>&nbsp;&nbsp; </span>status = RpcServerRegisterIf(</span></p>
            <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Example1_v1_0_s_ifspec, // Interface to register.</span></p>
            <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>NULL, // Use the MIDL generated entry-point vector.</span></p>
            <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>NULL); // Use the MIDL generated entry-point vector.</span></p>
            <p>&nbsp;</p>
            <p><span><span>&nbsp;&nbsp; </span>if (status)</span></p>
            <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>exit(status);</span></p>
            <p>&nbsp;</p>
            <p><span><span>&nbsp;&nbsp; </span>// Start to listen for remote procedure</span></p>
            <p><span><span>&nbsp;&nbsp; </span>// calls for all registered interfaces.</span></p>
            <p><span><span>&nbsp;&nbsp; </span>// This call will not return until</span></p>
            <p><span><span>&nbsp;&nbsp; </span>// RpcMgmtStopServerListening is called.</span></p>
            <p><span><span>&nbsp;&nbsp; </span>status = RpcServerListen(</span></p>
            <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>1, // Recommended minimum number of threads.</span></p>
            <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>RPC_C_LISTEN_MAX_CALLS_DEFAULT, // Recommended </span></p>
            <p><span>&nbsp;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>//maximum number of threads.</span></p>
            <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>FALSE); // Start listening now.</span></p>
            <p>&nbsp;</p>
            <p><span><span>&nbsp;&nbsp; </span>if (status)</span></p>
            <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>exit(status);</span></p>
            <p><span>}</span></p>
            <p>&nbsp;</p>
            <p><span>// Memory allocation function for RPC.</span></p>
            <p><span>// The runtime uses these two functions for allocating/deallocating</span></p>
            <p><span>// enough memory to pass the string to the server.</span></p>
            <p><span>void* __RPC_USER midl_user_allocate(size_t size)</span></p>
            <p><span>{</span></p>
            <p><span><span>&nbsp;&nbsp;&nbsp; </span>return malloc(size);</span></p>
            <p><span>}</span></p>
            <p>&nbsp;</p>
            <p><span>// Memory deallocation function for RPC.</span></p>
            <p><span>void __RPC_USER midl_user_free(void* p)</span></p>
            <p><span>{</span></p>
            <p><span><span>&nbsp;&nbsp;&nbsp; </span>free(p);</span></p>
            <p><span>}</span></p>
            </td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<p><span>这是初始化，和注册接口的代码。</span></p>
<p>&nbsp;</p>
<p><span>现在看看怎么写客户端</span></p>
<table cellSpacing=0 cellPadding=0 border=1>
    <tbody>
        <tr>
            <td vAlign=top width=568>
            <p><span>// File Example1Client.cpp</span></p>
            <p><span>#include &lt;iostream&gt;</span></p>
            <p><span>#include "Example1.h"</span></p>
            <p>&nbsp;</p>
            <p><span>int main()</span></p>
            <p><span>{</span></p>
            <p><span><span>&nbsp;&nbsp; </span>RPC_STATUS status;</span></p>
            <p><span><span>&nbsp;&nbsp; </span>unsigned char* szStringBinding = NULL;</span></p>
            <p>&nbsp;</p>
            <p><span><span>&nbsp;&nbsp; </span>// Creates a string binding handle.</span></p>
            <p><span><span>&nbsp;&nbsp; </span>// This function is nothing more than a printf.</span></p>
            <p><span><span>&nbsp;&nbsp; </span>// Connection is not done here.</span></p>
            <p><span><span>&nbsp;&nbsp; </span>status = RpcStringBindingCompose(</span></p>
            <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>NULL, // UUID to bind to.</span></p>
            <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>reinterpret_cast&lt;unsigned char*&gt;("ncacn_ip_tcp"), // Use TCP/IP</span></p>
            <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>// protocol.</span></p>
            <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>reinterpret_cast&lt;unsigned char*&gt;("localhost"), // TCP/IP network</span></p>
            <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>// address to use.</span></p>
            <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>reinterpret_cast&lt;unsigned char*&gt;("4747"), // TCP/IP port to use.</span></p>
            <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>NULL, // Protocol dependent network options to use.</span></p>
            <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&amp;szStringBinding); // String binding output.</span></p>
            <p>&nbsp;</p>
            <p><span><span>&nbsp;&nbsp; </span>if (status)</span></p>
            <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>exit(status);</span></p>
            <p>&nbsp;</p>
            <p><span><span>&nbsp;&nbsp; </span>// Validates the format of the string binding handle and converts</span></p>
            <p><span><span>&nbsp;&nbsp; </span>// it to a binding handle.</span></p>
            <p><span><span>&nbsp;&nbsp; </span>// Connection is not done here either.</span></p>
            <p><span><span>&nbsp;&nbsp; </span>status = RpcBindingFromStringBinding(</span></p>
            <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>szStringBinding, // The string binding to validate.</span></p>
            <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&amp;hExample1Binding); // Put the result in the implicit binding</span></p>
            <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>// handle defined in the IDL file.</span></p>
            <p>&nbsp;</p>
            <p><span><span>&nbsp;&nbsp; </span>if (status)</span></p>
            <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>exit(status);</span></p>
            <p>&nbsp;</p>
            <p><span><span>&nbsp;&nbsp; </span>RpcTryExcept</span></p>
            <p><span><span>&nbsp;&nbsp; </span>{</span></p>
            <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>// Calls the RPC function. The hExample1Binding binding handle</span></p>
            <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>// is used implicitly.</span></p>
            <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>// Connection is done here.</span></p>
            <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Output("Hello RPC World!");</span></p>
            <p><span><span>&nbsp;&nbsp; </span>}</span></p>
            <p><span><span>&nbsp;&nbsp; </span>RpcExcept(1)</span></p>
            <p><span><span>&nbsp;&nbsp; </span>{</span></p>
            <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>std::cerr &lt;&lt; "Runtime reported exception " &lt;&lt; RpcExceptionCode()</span></p>
            <p><span><span>&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>&lt;&lt; std::endl;</span></p>
            <p><span><span>&nbsp;&nbsp; </span>}</span></p>
            <p><span><span>&nbsp;&nbsp; </span>RpcEndExcept</span></p>
            <p>&nbsp;</p>
            <p><span><span>&nbsp;&nbsp; </span>// Free the memory allocated by a string.</span></p>
            <p><span><span>&nbsp;&nbsp; </span>status = RpcStringFree(</span></p>
            <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&amp;szStringBinding); // String to be freed.</span></p>
            <p>&nbsp;</p>
            <p><span><span>&nbsp;&nbsp; </span>if (status)</span></p>
            <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>exit(status);</span></p>
            <p>&nbsp;</p>
            <p><span><span>&nbsp;&nbsp; </span>// Releases binding handle resources and disconnects from the server.</span></p>
            <p><span><span>&nbsp;&nbsp; </span>status = RpcBindingFree(</span></p>
            <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&amp;hExample1Binding); // Frees the implicit binding handle defined in</span></p>
            <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>// the IDL file.</span></p>
            <p>&nbsp;</p>
            <p><span><span>&nbsp;&nbsp; </span>if (status)</span></p>
            <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>exit(status);</span></p>
            <p><span>}</span></p>
            <p>&nbsp;</p>
            <p><span>// Memory allocation function for RPC.</span></p>
            <p><span>// The runtime uses these two functions for allocating/deallocating</span></p>
            <p><span>// enough memory to pass the string to the server.</span></p>
            <p><span>void* __RPC_USER midl_user_allocate(size_t size)</span></p>
            <p><span>{</span></p>
            <p><span><span>&nbsp;&nbsp;&nbsp; </span>return malloc(size);</span></p>
            <p><span>}</span></p>
            <p>&nbsp;</p>
            <p><span>// Memory deallocation function for RPC.</span></p>
            <p><span>void __RPC_USER midl_user_free(void* p)</span></p>
            <p><span>{</span></p>
            <p><span><span>&nbsp;&nbsp;&nbsp; </span>free(p);</span></p>
            <p><span>}</span></p>
            </td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<img src ="http://www.cppblog.com/alantop/aggbug/27727.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/alantop/" target="_blank">AlanTop</a> 2007-07-09 12:41 <a href="http://www.cppblog.com/alantop/archive/2007/07/09/27727.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>UUID是什么？</title><link>http://www.cppblog.com/alantop/archive/2007/07/09/27726.html</link><dc:creator>AlanTop</dc:creator><author>AlanTop</author><pubDate>Mon, 09 Jul 2007 04:31:00 GMT</pubDate><guid>http://www.cppblog.com/alantop/archive/2007/07/09/27726.html</guid><wfw:comment>http://www.cppblog.com/alantop/comments/27726.html</wfw:comment><comments>http://www.cppblog.com/alantop/archive/2007/07/09/27726.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/alantop/comments/commentRss/27726.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/alantop/services/trackbacks/27726.html</trackback:ping><description><![CDATA[<font face=宋体>UUID就是Universal Unique IDentifier的缩写，它是一个128位，16字节的值，并确保在时间和空间上唯一。<br>它是把硬件地址、时间以及随机数结合在一起，来确保其唯一性的。</font><br><font face=宋体>一般情况下，生成算法用计算机网卡的地址和一个60位的timestamp生成，时间是以100ns为时间间隔。</font><br><font face=宋体>例如，一台300PL 6862的计算机，主板集成的网卡的MAC地址为00-04-AC-2E-B7-DC，而UUID的最后六个字节也会是0004AC2EB7DC</font>
<img src ="http://www.cppblog.com/alantop/aggbug/27726.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/alantop/" target="_blank">AlanTop</a> 2007-07-09 12:31 <a href="http://www.cppblog.com/alantop/archive/2007/07/09/27726.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>IDL是什么？</title><link>http://www.cppblog.com/alantop/archive/2007/07/09/27725.html</link><dc:creator>AlanTop</dc:creator><author>AlanTop</author><pubDate>Mon, 09 Jul 2007 04:22:00 GMT</pubDate><guid>http://www.cppblog.com/alantop/archive/2007/07/09/27725.html</guid><wfw:comment>http://www.cppblog.com/alantop/comments/27725.html</wfw:comment><comments>http://www.cppblog.com/alantop/archive/2007/07/09/27725.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/alantop/comments/commentRss/27725.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/alantop/services/trackbacks/27725.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: IDL(Interface Definition Language)即接口定义语言。&nbsp;&nbsp;<a href='http://www.cppblog.com/alantop/archive/2007/07/09/27725.html'>阅读全文</a><img src ="http://www.cppblog.com/alantop/aggbug/27725.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/alantop/" target="_blank">AlanTop</a> 2007-07-09 12:22 <a href="http://www.cppblog.com/alantop/archive/2007/07/09/27725.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>取得文件的后缀名</title><link>http://www.cppblog.com/alantop/archive/2007/07/06/27624.html</link><dc:creator>AlanTop</dc:creator><author>AlanTop</author><pubDate>Fri, 06 Jul 2007 13:20:00 GMT</pubDate><guid>http://www.cppblog.com/alantop/archive/2007/07/06/27624.html</guid><wfw:comment>http://www.cppblog.com/alantop/comments/27624.html</wfw:comment><comments>http://www.cppblog.com/alantop/archive/2007/07/06/27624.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/alantop/comments/commentRss/27624.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/alantop/services/trackbacks/27624.html</trackback:ping><description><![CDATA[LPTSTR&nbsp;PathFindExtension(&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;LPCTSTR&nbsp;<em>pPath</em><br>);<br><br>Searches a path for an extension. 
<img src ="http://www.cppblog.com/alantop/aggbug/27624.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/alantop/" target="_blank">AlanTop</a> 2007-07-06 21:20 <a href="http://www.cppblog.com/alantop/archive/2007/07/06/27624.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>写文件示例</title><link>http://www.cppblog.com/alantop/archive/2007/03/30/20940.html</link><dc:creator>AlanTop</dc:creator><author>AlanTop</author><pubDate>Fri, 30 Mar 2007 07:11:00 GMT</pubDate><guid>http://www.cppblog.com/alantop/archive/2007/03/30/20940.html</guid><wfw:comment>http://www.cppblog.com/alantop/comments/20940.html</wfw:comment><comments>http://www.cppblog.com/alantop/archive/2007/03/30/20940.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/alantop/comments/commentRss/20940.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/alantop/services/trackbacks/20940.html</trackback:ping><description><![CDATA[
		<p>#include &lt;stdio.h&gt;<br />#include &lt;afx.h&gt;</p>
		<p>void main()<br />{<br /> LPCTSTR lp = "hello";<br /> short s = 70;<br /> long l = 200;<br /> double d = 20.5;<br /> char buf[200];</p>
		<p> sprintf(buf, "%s %d %d %f\n", lp, s, l, d);</p>
		<p> FILE *fp;<br /> fp = fopen("c:\\ais1.txt", "wt");<br /> fprintf(fp, "%s", buf);<br /> fclose(fp);<br />}</p>
<img src ="http://www.cppblog.com/alantop/aggbug/20940.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/alantop/" target="_blank">AlanTop</a> 2007-03-30 15:11 <a href="http://www.cppblog.com/alantop/archive/2007/03/30/20940.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Windows应用程序捆绑核心编程 </title><link>http://www.cppblog.com/alantop/archive/2006/12/11/16260.html</link><dc:creator>AlanTop</dc:creator><author>AlanTop</author><pubDate>Mon, 11 Dec 2006 02:27:00 GMT</pubDate><guid>http://www.cppblog.com/alantop/archive/2006/12/11/16260.html</guid><wfw:comment>http://www.cppblog.com/alantop/comments/16260.html</wfw:comment><comments>http://www.cppblog.com/alantop/archive/2006/12/11/16260.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/alantop/comments/commentRss/16260.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/alantop/services/trackbacks/16260.html</trackback:ping><description><![CDATA[
		<a href="http://book.csdn.net/bookfiles/212/#c1">http://book.csdn.net/bookfiles/212/#c1</a>
<img src ="http://www.cppblog.com/alantop/aggbug/16260.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/alantop/" target="_blank">AlanTop</a> 2006-12-11 10:27 <a href="http://www.cppblog.com/alantop/archive/2006/12/11/16260.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>enumerate all the files in the current directory</title><link>http://www.cppblog.com/alantop/archive/2006/11/27/15708.html</link><dc:creator>AlanTop</dc:creator><author>AlanTop</author><pubDate>Mon, 27 Nov 2006 14:49:00 GMT</pubDate><guid>http://www.cppblog.com/alantop/archive/2006/11/27/15708.html</guid><wfw:comment>http://www.cppblog.com/alantop/comments/15708.html</wfw:comment><comments>http://www.cppblog.com/alantop/archive/2006/11/27/15708.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/alantop/comments/commentRss/15708.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/alantop/services/trackbacks/15708.html</trackback:ping><description><![CDATA[   CFileFind finder;<br />   BOOL bWorking = finder.FindFile("*.*");<br />   while (bWorking)<br />   {<br />      bWorking = finder.FindNextFile();<br />      cout &lt;&lt; (LPCTSTR) finder.GetFileName() &lt;&lt; endl;<br />   }<br /><img src ="http://www.cppblog.com/alantop/aggbug/15708.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/alantop/" target="_blank">AlanTop</a> 2006-11-27 22:49 <a href="http://www.cppblog.com/alantop/archive/2006/11/27/15708.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>内存映射文件示例</title><link>http://www.cppblog.com/alantop/archive/2006/11/27/15694.html</link><dc:creator>AlanTop</dc:creator><author>AlanTop</author><pubDate>Mon, 27 Nov 2006 07:08:00 GMT</pubDate><guid>http://www.cppblog.com/alantop/archive/2006/11/27/15694.html</guid><wfw:comment>http://www.cppblog.com/alantop/comments/15694.html</wfw:comment><comments>http://www.cppblog.com/alantop/archive/2006/11/27/15694.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/alantop/comments/commentRss/15694.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/alantop/services/trackbacks/15694.html</trackback:ping><description><![CDATA[
		<p> //获取当前操作系统的分配粒度<br /> SYSTEM_INFO sinf;<br /> GetSystemInfo(&amp;sinf);<br /> DWORD dwAllocationGranularity = sinf.dwAllocationGranularity;</p>
		<p> //GENERIC_WRITE | GENERIC_READ, FILE_SHARE_READ这两个参数如果设置错误将导致错误<br /> HANDLE hFile = CreateFile("join", GENERIC_WRITE | GENERIC_READ, FILE_SHARE_READ, <br />  NULL, CREATE_ALWAYS, FILE_FLAG_SEQUENTIAL_SCAN, NULL);</p>
		<p> //PAGE_READWRITE这个属性必须和GENERIC_WRITE | GENERIC_READ属性对应<br /> HANDLE hFileMapping = CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, <br />  0x4000000, NULL);<br /> <br /> CloseHandle(hFile);</p>
		<p> __int64 qwFileSize = 0x4000000;<br /> __int64 qwFileOffset = 0;<br /> __int64 T = 600 * sinf.dwAllocationGranularity;<br /> DWORD dwBytesInBlock = 1000 * sinf.dwAllocationGranularity;</p>
		<p> //qwFileOffset&gt;&gt;32 取６４位高位<br /> //qwFileOffset&amp;0xFFFFFFFF 取６４位低位<br /> //FILE_MAP_ALL_ACCESS这个属性与CreateFile和CreateFileMapping属性必须匹配<br /> PBYTE pbFile = (PBYTE)MapViewOfFile(hFileMapping, FILE_MAP_ALL_ACCESS, <br />  (DWORD)(qwFileOffset&gt;&gt;32), (DWORD)(qwFileOffset&amp;0xFFFFFFFF), dwBytesInBlock);</p>
		<p> memcpy(pbFile, "123", 3);<br /> char temp[3];<br /> memcpy(temp, pbFile, 3);</p>
		<p> UnmapViewOfFile(pbFile);</p>
<img src ="http://www.cppblog.com/alantop/aggbug/15694.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/alantop/" target="_blank">AlanTop</a> 2006-11-27 15:08 <a href="http://www.cppblog.com/alantop/archive/2006/11/27/15694.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>浏览器的编程接口。</title><link>http://www.cppblog.com/alantop/archive/2006/08/26/11725.html</link><dc:creator>AlanTop</dc:creator><author>AlanTop</author><pubDate>Fri, 25 Aug 2006 22:52:00 GMT</pubDate><guid>http://www.cppblog.com/alantop/archive/2006/08/26/11725.html</guid><wfw:comment>http://www.cppblog.com/alantop/comments/11725.html</wfw:comment><comments>http://www.cppblog.com/alantop/archive/2006/08/26/11725.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/alantop/comments/commentRss/11725.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/alantop/services/trackbacks/11725.html</trackback:ping><description><![CDATA[目前Browser的编程接口有两个：一个是Java script，一个是W3C规定的DOM接口。前者是Browser亲生的，因为Java Script解释器和浏览器的渲染引擎紧密结合在一起，效率高，效果好。而且从商业角度考虑，大多数页面离不开java script，如果对其支持的不好，就会直接影响到Browser的市场前景。后者呢，是W3C制定的标准接口，是Browser抱养的。因此，它的实现相对来说并不理想，使用的人也不是很多。从业务角度考虑，一个浏览器即使不支持它也不会受到太大的市场压力。因此它的质量也可想而知的。另外，W3C目前只规定了HTML的DOM接口，对于Browser的新特性，比如对SVG的支持，对&lt;canvas&gt;标记的支持都办不到。
<p>但是对于希望把浏览器作为应用的一个潜入式组件的开发者而言，DOM接口现状实在是一种噩梦。</p><p>这里，我想到这样一种解决方案：现在很多java script都在做js-java的桥接，我想能不能反其道而行之，做java-js的adaptor？我的思路是：把JAVA里DOM多数操作的实现给替换掉，不是让它们真的去操纵浏览器DOM树，而是仅仅生成一段JAVA SCRIPT代码，当遇到set**之类的方法时，通过某种途径执行这些java script代码。这里有两个难点：</p><p>一是如何得到并操纵浏览器的JS引擎。对于IE，找不到好的办法；但是对于Firefox/XULRUNNER，我想是可以的，通过装入插件，可以把JS引擎给暴露出来。</p><p>二是如何生成JAVA SCRIPT代码。这就需要一些编译的功利了。但是我想既然有那么多闲人有空能去把Swing放到Web容器里；把Eclipse架到Swing上；这个工作肯定也不是什么难事。</p><p>好处是什么？可以让java程序对浏览器更好的进行操控。<br /><br />附一个例子：<br />是用DOM实现的<br /><a href="http://zhmster.googlepages.com/Dsearch0825_Sample.rar">http://zhmster.googlepages.com/Dsearch0825_Sample.rar</a><br /></p><img src ="http://www.cppblog.com/alantop/aggbug/11725.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/alantop/" target="_blank">AlanTop</a> 2006-08-26 06:52 <a href="http://www.cppblog.com/alantop/archive/2006/08/26/11725.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Create DeskBands With TangramLite</title><link>http://www.cppblog.com/alantop/archive/2006/08/22/11547.html</link><dc:creator>AlanTop</dc:creator><author>AlanTop</author><pubDate>Mon, 21 Aug 2006 23:01:00 GMT</pubDate><guid>http://www.cppblog.com/alantop/archive/2006/08/22/11547.html</guid><wfw:comment>http://www.cppblog.com/alantop/comments/11547.html</wfw:comment><comments>http://www.cppblog.com/alantop/archive/2006/08/22/11547.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/alantop/comments/commentRss/11547.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/alantop/services/trackbacks/11547.html</trackback:ping><description><![CDATA[
		<a href="http://sourceforge.net/projects/tangramlite">http://sourceforge.net/projects/tangramlite</a>
		<br />
		<br />TangramLite (七巧板) is an Application Development FrameWork which support plug-in similar Eclipse. its a class library based on MFC/ATL, Developer can use TangramLite to develop win32 application, component which run on Window XP/2000. <!-- google_ad_section_end --><img src ="http://www.cppblog.com/alantop/aggbug/11547.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/alantop/" target="_blank">AlanTop</a> 2006-08-22 07:01 <a href="http://www.cppblog.com/alantop/archive/2006/08/22/11547.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>同一个端口收发数据</title><link>http://www.cppblog.com/alantop/archive/2006/07/01/9255.html</link><dc:creator>AlanTop</dc:creator><author>AlanTop</author><pubDate>Fri, 30 Jun 2006 17:58:00 GMT</pubDate><guid>http://www.cppblog.com/alantop/archive/2006/07/01/9255.html</guid><wfw:comment>http://www.cppblog.com/alantop/comments/9255.html</wfw:comment><comments>http://www.cppblog.com/alantop/archive/2006/07/01/9255.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/alantop/comments/commentRss/9255.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/alantop/services/trackbacks/9255.html</trackback:ping><description><![CDATA[
		<p>用同一个端口收发数据：<br />1. 可以用raw和udp<br /> <br />tcp， 每个client连上来， 就开了一个新的端口给此client。<br /><br />raw通过ip来区分，那样端口可以一样，不过要保证这些client的ip不一样</p>
		<p>还可以使用mac来区分client,那样ip,端口都不需要理会了<br /><br />具体实现方法，端口重用。<br /><br />setsockopt（。。。SO_REUSEADDR。。。）</p>
<img src ="http://www.cppblog.com/alantop/aggbug/9255.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/alantop/" target="_blank">AlanTop</a> 2006-07-01 01:58 <a href="http://www.cppblog.com/alantop/archive/2006/07/01/9255.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>strstr另一个实现方法：</title><link>http://www.cppblog.com/alantop/archive/2006/06/05/8165.html</link><dc:creator>AlanTop</dc:creator><author>AlanTop</author><pubDate>Sun, 04 Jun 2006 16:04:00 GMT</pubDate><guid>http://www.cppblog.com/alantop/archive/2006/06/05/8165.html</guid><wfw:comment>http://www.cppblog.com/alantop/comments/8165.html</wfw:comment><comments>http://www.cppblog.com/alantop/archive/2006/06/05/8165.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/alantop/comments/commentRss/8165.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/alantop/services/trackbacks/8165.html</trackback:ping><description><![CDATA[
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-INDENT: -36pt; mso-list: l2 level1 lfo2; tab-stops: list 36.0pt">
				<b style="mso-bidi-font-weight: normal">
						<span lang="EN-US" style="FONT-SIZE: 16pt; mso-bidi-font-family: 宋体">
								<span style="mso-list: Ignore">
										<font face="Times New Roman">
												<span style="FONT: 7pt 'Times New Roman'">  </span>
										</font>
								</span>
						</span>
				</b>
				<b style="mso-bidi-font-weight: normal">
						<span style="FONT-SIZE: 16pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">简单匹配算法</span>
				</b>
		</p>
		<p>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt">
				<span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">
						<font size="3">先来看一个简单匹配算法的函数：</font>
				</span>
		</p>
		<p>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: #3366ff">
						<font face="Times New Roman">
								<font size="3">int Index_BF ( char S [ ], char T [ ], int pos ) 
<p></p></font>
						</font>
				</span>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="COLOR: #3366ff">
						<font face="Times New Roman">
								<font size="3">{ 
<p></p></font>
						</font>
				</span>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 15.75pt; mso-char-indent-count: 1.5">
				<font size="3">
						<span lang="EN-US">
								<font face="Times New Roman">/* </font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">若串</span>
						<span lang="EN-US">
								<font face="Times New Roman"> S </font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">中从第</span>
						<span lang="EN-US">
								<font face="Times New Roman">pos(S </font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">的下标</span>
						<span lang="EN-US">
								<font face="Times New Roman">0</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">≤</span>
						<span lang="EN-US">
								<font face="Times New Roman">pos&lt;StrLength(S))</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">个字符</span>
				</font>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 31.5pt; mso-char-indent-count: 3.0">
				<font size="3">
						<span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">起存在和串</span>
						<span lang="EN-US">
								<font face="Times New Roman"> T </font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">相同的子串，则称匹配成功，返回第一个</span>
				</font>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 31.5pt; mso-char-indent-count: 3.0">
				<font size="3">
						<span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">这样的子串在串</span>
						<span lang="EN-US">
								<font face="Times New Roman"> S </font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">中的下标，否则返回</span>
						<span lang="EN-US">
								<font face="Times New Roman"> -1<span style="mso-spacerun: yes">    </span>*/</font>
						</span>
				</font>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0">
				<span lang="EN-US" style="COLOR: #3366ff">
						<font face="Times New Roman">
								<font size="3">int i = pos, j = 0; 
<p></p></font>
						</font>
				</span>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0">
				<span lang="EN-US" style="COLOR: #3366ff">
						<font face="Times New Roman">
								<font size="3">while ( S[i+j] != '\0'&amp;&amp; T[j] != '\0') 
<p></p></font>
						</font>
				</span>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0">
				<span lang="EN-US" style="COLOR: #3366ff">
						<font face="Times New Roman">
								<font size="3">if ( S[i+j] == T[j] ) 
<p></p></font>
						</font>
				</span>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 36.75pt; mso-char-indent-count: 3.5">
				<font size="3">
						<font face="Times New Roman">
								<span lang="EN-US" style="COLOR: #3366ff">j ++;</span>
								<span lang="EN-US"> // </span>
						</font>
						<span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">继续比较后一字符</span>
				</font>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0">
				<span lang="EN-US" style="COLOR: #3366ff">
						<font face="Times New Roman">
								<font size="3">else 
<p></p></font>
						</font>
				</span>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 15.75pt; mso-char-indent-count: 1.5">
				<span lang="EN-US" style="COLOR: #3366ff">
						<font face="Times New Roman">
								<font size="3">{ 
<p></p></font>
						</font>
				</span>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 31.5pt; mso-char-indent-count: 3.0">
				<font size="3">
						<font face="Times New Roman">
								<span lang="EN-US" style="COLOR: #3366ff">i ++; j = 0; </span>
								<span lang="EN-US">// </span>
						</font>
						<span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">重新开始新的一轮匹配</span>
						<span lang="EN-US" style="COLOR: #3366ff">
								<p>
								</p>
						</span>
				</font>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 15.75pt; mso-char-indent-count: 1.5">
				<font face="Times New Roman">
						<font size="3">
								<span lang="EN-US" style="COLOR: #3366ff">}</span>
								<span lang="EN-US">
								</span>
						</font>
				</font>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 10.5pt; mso-char-indent-count: 1.0">
				<span lang="EN-US" style="COLOR: #3366ff">
						<font face="Times New Roman">
								<font size="3">if ( T[j] == '\0') 
<p></p></font>
						</font>
				</span>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 26.25pt; mso-char-indent-count: 2.5">
				<font size="3">
						<font face="Times New Roman">
								<span lang="EN-US" style="COLOR: #3366ff">return i;</span>
								<span lang="EN-US"> // </span>
						</font>
						<span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">匹配成功</span>
						<span lang="EN-US">
								<span style="mso-spacerun: yes">
										<font face="Times New Roman">   </font>
								</span>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">返回下标</span>
				</font>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 10.5pt; mso-char-indent-count: 1.0">
				<span lang="EN-US" style="COLOR: #3366ff">
						<font face="Times New Roman">
								<font size="3">else 
<p></p></font>
						</font>
				</span>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 26.25pt; mso-char-indent-count: 2.5">
				<font size="3">
						<font face="Times New Roman">
								<span lang="EN-US" style="COLOR: #3366ff">return -1; </span>
								<span lang="EN-US">// </span>
						</font>
						<span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">串</span>
						<span lang="EN-US">
								<font face="Times New Roman">S</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">中</span>
						<span lang="EN-US">
								<font face="Times New Roman">(</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">第</span>
						<span lang="EN-US">
								<font face="Times New Roman">pos</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">个字符起</span>
						<span lang="EN-US">
								<font face="Times New Roman">)</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">不存在和串</span>
						<span lang="EN-US">
								<font face="Times New Roman">T</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">相同的子串</span>
				</font>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<font face="Times New Roman">
						<font size="3">
								<span lang="EN-US" style="COLOR: #3366ff">} </span>
								<span lang="EN-US">// Index_BF</span>
						</font>
				</font>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<p>
								<font face="Times New Roman" size="3">
								</font> </p>
				</span>
		</p>
<img src ="http://www.cppblog.com/alantop/aggbug/8165.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/alantop/" target="_blank">AlanTop</a> 2006-06-05 00:04 <a href="http://www.cppblog.com/alantop/archive/2006/06/05/8165.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CreateThread示例。</title><link>http://www.cppblog.com/alantop/archive/2006/06/04/8163.html</link><dc:creator>AlanTop</dc:creator><author>AlanTop</author><pubDate>Sun, 04 Jun 2006 15:22:00 GMT</pubDate><guid>http://www.cppblog.com/alantop/archive/2006/06/04/8163.html</guid><wfw:comment>http://www.cppblog.com/alantop/comments/8163.html</wfw:comment><comments>http://www.cppblog.com/alantop/archive/2006/06/04/8163.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/alantop/comments/commentRss/8163.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/alantop/services/trackbacks/8163.html</trackback:ping><description><![CDATA[
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">The CreateThread function creates a new thread for a process. The creating thread must specify the starting address of the code that the new thread is to execute. Typically, the starting address is the name of a function defined in the program code (for more information, see ThreadProc). This function takes a single parameter and returns a DWORD value. A process can have multiple threads simultaneously executing the same function. <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?><o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">CreateThread</span>
				<span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">函数从一个进程里面创建一个线程。这个开始的线程必须指定开始执行代码的地址，新线程执行。有代表性的，开始地址就是一个函数名。这个函数有一个参数，并且返回一个</span>
				<span lang="EN-US">DWORD</span>
				<span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">值。一个进程里面同时有多个线程在执行。</span>
				<span lang="EN-US">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">The following is a simple example that demonstrates how to create a new thread that executes the locally defined function, ThreadProc. The creating thread uses a dynamically allocated buffer to pass unique information to each instance of the thread function. It is the responsibility of the thread function to free the memory.<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">下面这个例子演示如何创建一个新线程，执行本地定义的函数。</span>
				<span lang="EN-US">ThreadProc. </span>
				<span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">建立的线程动态分配内存传递信息到每个线程的实例中。线程函数负责释放这些内存。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">The calling thread uses the WaitForMultipleObjects function to persist until all worker threads have terminated. Note that if you were to close the handle to a worker thread before it terminated, this does not terminate the worker thread. However, the handle will be unavailable for use in subsequent function calls.</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">被调用的线程用</span>
				<span lang="EN-US">WaitForMultipleObjects</span>
				<span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">持续等待，知道所有的工作线程退出。在线程退出后，关掉线程函数的句柄。</span>
		</p>
		<p>
				<br />#include &lt;windows.h&gt;<br />#include &lt;strsafe.h&gt; //win2003 SDK必须安装　要不无此头文件。此文件是为了实现StringCchPrintf，StringCchLength。</p>
		<p>#define MAX_THREADS 3<br />#define BUF_SIZE 255</p>
		<p>typedef struct _MyData {<br />    int val1;<br />    int val2;<br />} MYDATA, *PMYDATA;</p>
		<p>DWORD WINAPI ThreadProc( LPVOID lpParam ) <br />{ <br />    HANDLE hStdout;<br />    PMYDATA pData;</p>
		<p>    TCHAR msgBuf[BUF_SIZE];<br />    size_t cchStringSize;<br />    DWORD dwChars;</p>
		<p>    hStdout = GetStdHandle(STD_OUTPUT_HANDLE);<br />    if( hStdout == INVALID_HANDLE_VALUE )<br />        return 1;</p>
		<p>    // Cast the parameter to the correct data type.</p>
		<p>    pData = (PMYDATA)lpParam;</p>
		<p>    // Print the parameter values using thread-safe functions.</p>
		<p>    StringCchPrintf(msgBuf, BUF_SIZE, TEXT("Parameters = %d, %d\n"), <br />        pData-&gt;val1, pData-&gt;val2); <br />    StringCchLength(msgBuf, BUF_SIZE, &amp;cchStringSize);<br />    WriteConsole(hStdout, msgBuf, cchStringSize, &amp;dwChars, NULL);</p>
		<p>    // Free the memory allocated by the caller for the thread <br />    // data structure.</p>
		<p>    HeapFree(GetProcessHeap(), 0, pData);</p>
		<p>    return 0; <br />} <br /> <br />void main()<br />{<br />    PMYDATA pData;<br />    DWORD dwThreadId[MAX_THREADS];<br />    HANDLE hThread[MAX_THREADS]; <br />    int i;</p>
		<p>    // Create MAX_THREADS worker threads.</p>
		<p>    for( i=0; i&lt;MAX_THREADS; i++ )<br />    {<br />        // Allocate memory for thread data.</p>
		<p>        pData = (PMYDATA)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,<br />                sizeof(MYDATA));<br />    //5);</p>
		<p>        if( pData == NULL )<br />            ExitProcess(2);</p>
		<p>        // Generate unique data for each thread.</p>
		<p>        pData-&gt;val1 = i;<br />        pData-&gt;val2 = i+100;</p>
		<p>        hThread[i] = CreateThread( <br />            NULL,              // default security attributes<br />            0,                 // use default stack size  <br />            ThreadProc,        // thread function <br />            pData,             // argument to thread function <br />            0,                 // use default creation flags <br />            &amp;dwThreadId[i]);   // returns the thread identifier <br /> <br />        // Check the return value for success. <br /> <br />        if (hThread[i] == NULL) <br />        {<br />            ExitProcess(i);<br />        }<br />    }</p>
		<p>    // Wait until all threads have terminated.</p>
		<p>    WaitForMultipleObjects(MAX_THREADS, hThread, TRUE, INFINITE);</p>
		<p>    // Close all thread handles upon completion.</p>
		<p>    for(i=0; i&lt;MAX_THREADS; i++)<br />    {<br />        CloseHandle(hThread[i]);<br />    }<br />}<br /></p>
<img src ="http://www.cppblog.com/alantop/aggbug/8163.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/alantop/" target="_blank">AlanTop</a> 2006-06-04 23:22 <a href="http://www.cppblog.com/alantop/archive/2006/06/04/8163.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>strstr函数的实现</title><link>http://www.cppblog.com/alantop/archive/2006/06/04/8148.html</link><dc:creator>AlanTop</dc:creator><author>AlanTop</author><pubDate>Sun, 04 Jun 2006 08:27:00 GMT</pubDate><guid>http://www.cppblog.com/alantop/archive/2006/06/04/8148.html</guid><wfw:comment>http://www.cppblog.com/alantop/comments/8148.html</wfw:comment><comments>http://www.cppblog.com/alantop/archive/2006/06/04/8148.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/alantop/comments/commentRss/8148.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/alantop/services/trackbacks/8148.html</trackback:ping><description><![CDATA[
		<p>#include &lt;stdio.h&gt;<br />#include &lt;string.h&gt;</p>
		<p>bool compare( char *src, char *dst, size_t n);</p>
		<p>bool my_strstr( char *string, char *strCharSet )<br />{<br /> int string_length = strlen(string);<br /> int strCharSet_length = strlen(strCharSet);</p>
		<p> int i , j;<br /> i = j = 0;<br /> char *temp;</p>
		<p> for ( ; *string != '\0' ; )<br /> {<br />  if ( *string == *strCharSet )<br />  {<br />   temp = string;<br />   return compare( temp, string, strCharSet_length -1 ) ;<br />  }<br />  else<br />   string++;<br /> }<br /> <br /> return false;<br />}</p>
		<p> </p>
		<p>void main( void )<br />{<br /> char *str1 = "1234";<br /> char *str2 = "56";</p>
		<p> bool result = my_strstr( str1, str2 );</p>
		<p> </p>
		<p>}</p>
		<p>/********************************************************************<br /> purpose: 对比两个字符串，在开始的n个字节中，是否相同。<br /> 　　　　　　相同的话返回true,不同返回false.<br />*********************************************************************/</p>
		<p>bool compare( char *src, char *dst, size_t n)<br />{<br /> size_t j = 0;</p>
		<p> for ( size_t i = 0; i &lt; n; ++i )<br /> {<br />  if ( src[i] == dst[i] )<br />   j++;<br />  else<br />   break;<br /> }</p>
		<p> if ( j == n )<br />  return true;<br /> else<br />  return false;<br />}</p>
		<p> </p>
		<p> </p>
<img src ="http://www.cppblog.com/alantop/aggbug/8148.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/alantop/" target="_blank">AlanTop</a> 2006-06-04 16:27 <a href="http://www.cppblog.com/alantop/archive/2006/06/04/8148.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>逻辑操作符</title><link>http://www.cppblog.com/alantop/archive/2006/06/04/8137.html</link><dc:creator>AlanTop</dc:creator><author>AlanTop</author><pubDate>Sat, 03 Jun 2006 16:25:00 GMT</pubDate><guid>http://www.cppblog.com/alantop/archive/2006/06/04/8137.html</guid><wfw:comment>http://www.cppblog.com/alantop/comments/8137.html</wfw:comment><comments>http://www.cppblog.com/alantop/archive/2006/06/04/8137.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/alantop/comments/commentRss/8137.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/alantop/services/trackbacks/8137.html</trackback:ping><description><![CDATA[
		<p>逻辑与　　＆＆　　<br />逻辑或　　｜｜　<br /><br />按位与　　　&amp;<br />按位异或        ^<br />按位或            |<br />按位非　　　～<br /><br /></p>
<img src ="http://www.cppblog.com/alantop/aggbug/8137.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/alantop/" target="_blank">AlanTop</a> 2006-06-04 00:25 <a href="http://www.cppblog.com/alantop/archive/2006/06/04/8137.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Convert the Unicode full name to ANSI</title><link>http://www.cppblog.com/alantop/archive/2006/06/03/8119.html</link><dc:creator>AlanTop</dc:creator><author>AlanTop</author><pubDate>Sat, 03 Jun 2006 04:40:00 GMT</pubDate><guid>http://www.cppblog.com/alantop/archive/2006/06/03/8119.html</guid><wfw:comment>http://www.cppblog.com/alantop/comments/8119.html</wfw:comment><comments>http://www.cppblog.com/alantop/archive/2006/06/03/8119.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/alantop/comments/commentRss/8119.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/alantop/services/trackbacks/8119.html</trackback:ping><description><![CDATA[
		<pre>点击标题进入，格式即正常。<br /><br /><br /><br />#include &lt;windows.h&gt;
#include &lt;lm.h&gt;
#include &lt;stdio.h&gt;

BOOL GetFullName( char *UserName, char *Domain, char *dest )
{
    WCHAR wszUserName[256];          // Unicode user name
    WCHAR wszDomain[256]; 
    LPBYTE ComputerName;

    struct _SERVER_INFO_100 *si100;  // Server structure
    struct _USER_INFO_2 *ui;         // User structure

// Convert ANSI user name and domain to Unicode

    MultiByteToWideChar( CP_ACP, 0, UserName,
        strlen(UserName)+1, wszUserName,   
     sizeof(wszUserName)/sizeof(wszUserName[0]) );
    MultiByteTOWideChar( CP_ACP, 0, Domain,
        strlen(Domain)+1, wszDomain, sizeof(wszDomain)/sizeof(wszDomain[0]) );

// Get the computer name of a DC for the domain.

    NetGetDCName( NULL, wszDomain, &amp;ComputerName );

// Look up the user on the DC.

    if( NetUserGetInfo( (LPWSTR) ComputerName,
        (LPWSTR) &amp;wszUserName, 2, (LPBYTE *) &amp;ui ) )
    {
        printf( "Error getting user information.\n" );
        return( FALSE );
    }

// Convert the Unicode full name to ANSI.

    WideCharToMultiByte( CP_ACP, 0, ui-&gt;usri2_full_name, -1,
        dest, 256, NULL, NULL );

    return (TRUE);
}</pre>
		<!-- Info Task Footer -->
<img src ="http://www.cppblog.com/alantop/aggbug/8119.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/alantop/" target="_blank">AlanTop</a> 2006-06-03 12:40 <a href="http://www.cppblog.com/alantop/archive/2006/06/03/8119.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>