﻿<?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++博客-拂晓·明月·弯刀-随笔分类-C++技术/工作总结</title><link>http://www.cppblog.com/ietj/category/5855.html</link><description>观望，等待只能让出现的机会白白溜走</description><language>zh-cn</language><lastBuildDate>Mon, 18 Apr 2011 21:48:41 GMT</lastBuildDate><pubDate>Mon, 18 Apr 2011 21:48:41 GMT</pubDate><ttl>60</ttl><item><title>项目文件组织结构</title><link>http://www.cppblog.com/ietj/archive/2010/09/17/126870.html</link><dc:creator>一路风尘</dc:creator><author>一路风尘</author><pubDate>Fri, 17 Sep 2010 06:23:00 GMT</pubDate><guid>http://www.cppblog.com/ietj/archive/2010/09/17/126870.html</guid><wfw:comment>http://www.cppblog.com/ietj/comments/126870.html</wfw:comment><comments>http://www.cppblog.com/ietj/archive/2010/09/17/126870.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ietj/comments/commentRss/126870.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ietj/services/trackbacks/126870.html</trackback:ping><description><![CDATA[ <p>文档组织结构如下图所示：</p> <p>          <img src="http://lh5.ggpht.com/_1J132T3weHc/TJMJZWJcDpI/AAAAAAAAAk8/IAr7oUMzIlg/ProjectDirTree.jpg?imgmax=288" alt="ProjectDirTree.jpg" height="265" width="209"/>        </p> <p>可以作如下的灵活改动：</p> <ul> <li>将build下的vc6,vs2005上移一层，即命名为：build-vc6, build-vs2005;</li> <li>将test下移一层，如在src目录下建test目录,下面子目录为: unittest, benchmarks, integration;</li> </ul> <img src ="http://www.cppblog.com/ietj/aggbug/126870.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ietj/" target="_blank">一路风尘</a> 2010-09-17 14:23 <a href="http://www.cppblog.com/ietj/archive/2010/09/17/126870.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DLL相关总结</title><link>http://www.cppblog.com/ietj/archive/2010/09/16/126777.html</link><dc:creator>一路风尘</dc:creator><author>一路风尘</author><pubDate>Thu, 16 Sep 2010 07:54:00 GMT</pubDate><guid>http://www.cppblog.com/ietj/archive/2010/09/16/126777.html</guid><wfw:comment>http://www.cppblog.com/ietj/comments/126777.html</wfw:comment><comments>http://www.cppblog.com/ietj/archive/2010/09/16/126777.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ietj/comments/commentRss/126777.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ietj/services/trackbacks/126777.html</trackback:ping><description><![CDATA[
<p>以下总结只针对windows平台:</p>
<ol>
<li>dll文件应有static 和 dynamic的版本，编译时临时文件的目录分别是: Debug, Release, DebugDll, ReleaseDll。</li>
<li>一般推荐使用dll的static版本，因为这样就不用指定dll文件所在的路径，以后对文件大小或其它要求时再换成dynamic版本的；但中间要注意的是:<span style="COLOR: #ff0000">如果static版本文件有所改变，依赖其的项目要手动重新编译</span>，不然使用的还是老版本的static 库。</li>
<li>dll文件命名为: XxD.lib(Debug), Xx.lib(Release), XxD_dll.lib(Debug Dynamic), Xx_dll.lib(Release Dynamic), 如果是Unicode版本,在相应的'.'或'D'字符前加U，如:XxUD.lib(Debug Unicode), XxU.lib(Release Unicode)。</li>
<li>作为第三方API时，应提供完整的include, lib, bin目录，readme.txt文件，可选择提供example, doc目录。 其中：include文件夹中放依赖的头文件；lib中放所有的*.lib文件；bin中放所有的*.dll文件。</li>
<li>作为第三方API时，最好是通过def的方式生成，这样可以跨语言使用。如果只限于c++调用，并且要导出的类比较多，则可以折中考虑使用dllexport的方式。</li>
</ol>
<p>以下总结是以前在Linux平台：(Eclipse+CDT)</p>
<ol>
<li>如何新建库项目: 先新建一空项目，再修改设置：项目Property页---&gt;C/C++ Buildings---&gt;Settings---&gt;Build Artifact---&gt;Artifact Type中选择库类型。</li>
<li>静态库使用：
<ul>
<li>设置include头文件目录:.I./../XxLib/include;</li>
<li>设置Linker库文件目录: -L./../XxLib/lib;</li>
<li>设置Linker库文件: -lXxLib</li>
</ul>
</li>
<li>动态库使用:
<ul>
<li>隐式调用同上面的静态库；</li>
<li>显式调用在Linker中: -ldl -lXxLib;</li>
<li>如果动态库不是放在/lib,/usr/lib目录下，需设置环境变量：LD_LIBRARY_PATH=./../XLib/lib</li>
</ul>
</li>
<li>当同时存在该库的静态版本和共享版本时，链接器优先使用共享版本Xx.so，此时你可以使用-static链接选项指定链接静态版本Xx.a</li>
<li>动态库可以导出两个特殊的函数：_init和_fini，前者在动态库被加载后调用，后者在动态库被卸载前调用，我们可以使用这两个函数做些特别的工作。需要注意的是：在定义这两个函数后编译时，需要使用-nostartfiles选项，否则编译器报重复定义错误。</li>
<li>应用程序与库混合调试：项目Property页---&gt;C/C++ General---&gt;Paths and Symbols---&gt;References---&gt;选择引用库。</li>
<li>ldd用来查看程序所依赖的共享库，同时也方便我们判断共享库是否被找到; nm命令查看obj文件(.so也是一个obj)中的标识(函数、变量)。</li>
</ol>
<p>Q：<span style="COLOR: #ff0000">在Linux的DLL中如何使用stdcall调用方式</span>
        </p>
<img src ="http://www.cppblog.com/ietj/aggbug/126777.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ietj/" target="_blank">一路风尘</a> 2010-09-16 15:54 <a href="http://www.cppblog.com/ietj/archive/2010/09/16/126777.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>编程环境总结</title><link>http://www.cppblog.com/ietj/archive/2010/06/09/117493.html</link><dc:creator>一路风尘</dc:creator><author>一路风尘</author><pubDate>Wed, 09 Jun 2010 12:40:00 GMT</pubDate><guid>http://www.cppblog.com/ietj/archive/2010/06/09/117493.html</guid><wfw:comment>http://www.cppblog.com/ietj/comments/117493.html</wfw:comment><comments>http://www.cppblog.com/ietj/archive/2010/06/09/117493.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ietj/comments/commentRss/117493.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ietj/services/trackbacks/117493.html</trackback:ping><description><![CDATA[
<p>在VC6，VS2005中，经常碰到的一些环境设置方面的问题：</p>
<ol>
<li>工程---&gt;设置中，有时需要在pre-link/post-build执行一些控制台命令,这时要注意路径符号的一致。如：<strong style="COLOR: #ff0000">co<span style="COLOR: #ff0000">py文件时的源路径与目标路径符号'\'或'/'必须一致，还是只能使用'\'形式的路径？</span></strong></li>
<li>CommBook的release版本为什么不可用<span style="COLOR: #0000ff"><br/>
<span style="COLOR: #000000"><span style="COLOR: #000000"><span style="COLOR: #000000">工程---&gt;设置</span>---&gt;C/C++---&gt;常规中，调整优化选项，本次是将最快速度调整为其它的</span></span>。</span></li>
<li>
<p><span style="COLOR: #0000ff"><span style="COLOR: #000000">ini文件中的key名称不区分大小写。</span></span></p>
</li>
</ol>
<img src ="http://www.cppblog.com/ietj/aggbug/117493.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ietj/" target="_blank">一路风尘</a> 2010-06-09 20:40 <a href="http://www.cppblog.com/ietj/archive/2010/06/09/117493.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux下错误如何定位</title><link>http://www.cppblog.com/ietj/archive/2010/06/09/117488.html</link><dc:creator>一路风尘</dc:creator><author>一路风尘</author><pubDate>Wed, 09 Jun 2010 10:38:00 GMT</pubDate><guid>http://www.cppblog.com/ietj/archive/2010/06/09/117488.html</guid><wfw:comment>http://www.cppblog.com/ietj/comments/117488.html</wfw:comment><comments>http://www.cppblog.com/ietj/archive/2010/06/09/117488.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ietj/comments/commentRss/117488.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ietj/services/trackbacks/117488.html</trackback:ping><description><![CDATA[
<p>这段时间，由于做的是Linux环境下的C++程序移植工作，总会碰到"段错误/已放弃"之类的问题，可以通过以下方式得到程序退出时的调用堆栈信息，方便错误的定位</p>
<ol>
<li>打开生成core.xxx文件开关：设置ulimit -c unlimited，也可在环境变量中设置，以避免每次打开终端时都要进行设置；</li>
<li>执行linux下debug版本的应用程序: ./AppName；</li>
<li>程序出现"段错误/已放弃"而退出时，会在当前运行目录下产生 core.xxx文件(其中xxx是一串数字)；</li>
<li>使用gdb运行core.xxx文件: gdb ./AppName core.xxx；</li>
<li>在gdb&gt;下执行info stack查看最后的堆栈,从堆栈中得到最后退出时的信息。</li>
</ol>
<p>更多操作详情查看: <a href="http://www.linuxers.cn/2010/01/19/linux下发生段错误时如何产生core文件/">Linux下发生段错误时如何产生core文件</a></p>
<img src ="http://www.cppblog.com/ietj/aggbug/117488.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ietj/" target="_blank">一路风尘</a> 2010-06-09 18:38 <a href="http://www.cppblog.com/ietj/archive/2010/06/09/117488.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PC-Lint使用</title><link>http://www.cppblog.com/ietj/archive/2009/11/10/100620.html</link><dc:creator>一路风尘</dc:creator><author>一路风尘</author><pubDate>Tue, 10 Nov 2009 07:29:00 GMT</pubDate><guid>http://www.cppblog.com/ietj/archive/2009/11/10/100620.html</guid><wfw:comment>http://www.cppblog.com/ietj/comments/100620.html</wfw:comment><comments>http://www.cppblog.com/ietj/archive/2009/11/10/100620.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ietj/comments/commentRss/100620.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ietj/services/trackbacks/100620.html</trackback:ping><description><![CDATA[<p>PC-Lint是一款针对C/C++的代码静态分析工具，可以把它看作一种更加严格的编译器，不仅可以检查出一般的语法错误(当前编译器所作的工作)，还可以检查出那些符合语法要求但不易发现的潜在错误，如：</p>
<ul>
    <li>else对if的就近匹配原则
    <li>优先级导致的错误
    <li>以0开头的数字(作为8进制处理)
    <li>&amp;&amp;, ||, ==等的漏写 </li>
</ul>
<p><span class=Apple-style-span style="WORD-SPACING: 0px; FONT: medium Simsun; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><span class=Apple-style-span style="FONT-SIZE: small; LINE-HEIGHT: 21px; FONT-FAMILY: verdana, sans-serif; TEXT-ALIGN: left; webkit-border-horizontal-spacing: 2px; webkit-border-vertical-spacing: 2px">C/C++语言的灵活性带来了代码效率的提升，但也因其灵活性而带来了代码编写的随意性，另外C/C++编译器不进行强制类型检查，也带来了代码编写的隐患。PC-Lint识别并报告C/C++语言中的编程陷阱和格式缺陷的发生。它进行程序的全局分析，能识别没有被适当检验的数组下标，报告未被初始化的变量，警告使用空指针，冗余的代码等等。软件除错是软件项目开发成本和延误的主要因素。根据发现错误时间与成本成指数级的关系，PC-Lint能够帮你在程序动态测试之前发现编码错误。这样消除错误的成本更低。</span> </span></p>
<p><span class=Apple-style-span style="WORD-SPACING: 0px; FONT: medium Simsun; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><span class=Apple-style-span style="FONT-SIZE: small; LINE-HEIGHT: 21px; FONT-FAMILY: verdana, sans-serif; TEXT-ALIGN: left; webkit-border-horizontal-spacing: 2px; webkit-border-vertical-spacing: 2px">正因为其重要性,在很多专业级的软件公司,如Microsoft中，PC-Lint检查是无错误无警告是代码首先要过的第一关<span class=Apple-style-span style="WORD-SPACING: 0px; FONT: medium Simsun; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><span class=Apple-style-span style="COLOR: #000000; LINE-HEIGHT: 25px; FONT-FAMILY: Verdana">。</span> </span></span></span><span class=Apple-style-span style="WORD-SPACING: 0px; FONT: medium Simsun; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><span class=Apple-style-span style="FONT-SIZE: small; LINE-HEIGHT: 21px; FONT-FAMILY: verdana, sans-serif; TEXT-ALIGN: left; webkit-border-horizontal-spacing: 2px; webkit-border-vertical-spacing: 2px">本文将就PC-Lint在VC6上的使用作一简单的介绍：</span> </span></p>
<ol>
    <li><span class=Apple-style-span style="WORD-SPACING: 0px; FONT: medium Simsun; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><span class=Apple-style-span style="FONT-SIZE: small; LINE-HEIGHT: 21px; FONT-FAMILY: verdana, sans-serif; TEXT-ALIGN: left; webkit-border-horizontal-spacing: 2px; webkit-border-vertical-spacing: 2px"><strong>下载与安装</strong> </span></span><span class=Apple-style-span style="WORD-SPACING: 0px; FONT: medium Simsun; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><span class=Apple-style-span style="FONT-SIZE: small; LINE-HEIGHT: 21px; FONT-FAMILY: verdana, sans-serif; TEXT-ALIGN: left; webkit-border-horizontal-spacing: 2px; webkit-border-vertical-spacing: 2px"><br>官方网址为：<a href="http://www.gimpel.com/" target=_blank>http://www.gimpel.com/</a>，但PC-Lint是一款共享软件，因此只能通过其它途径下载使用了，本人使用的是PC-Lint8.0w版本。</span> </span>
    <li><span class=Apple-style-span style="WORD-SPACING: 0px; FONT: medium Simsun; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><span class=Apple-style-span style="FONT-SIZE: small; LINE-HEIGHT: 21px; FONT-FAMILY: verdana, sans-serif; TEXT-ALIGN: left; webkit-border-horizontal-spacing: 2px; webkit-border-vertical-spacing: 2px"><strong>配置</strong> <br>文件解压后可以看到如下文件：(解压目录为E:\Work\DevLib\pclint,以下将用$(PC-Lint)代替)</span>&nbsp;</span><img height=400 alt="" src="http://www.cppblog.com/images/cppblog_com/ietj/PCLint-Directory.JPG" width=640 border=0> <br>可以使用Config.exe的向导功能配置个针对自个环境的lnt文件，我这里是直接编辑文本文件std.lnt，保存在$(PC-Lint)目录下，其中VC6的安装目录为：d:\Program Files\Microsoft Visual Studio\VC98。std.lnt内容如下： <br><code><em>au-sm.lnt <br>co-msc60.lnt <br>env-vc6.lnt <br>lib-mfc.lnt <br>lib-stl.lnt <br>lib-w32.lnt <br>lib-wnt.lnt <br>lib-atl.lnt <br>options.lnt -si4 -sp4 <br><br>-i"d:\Program Files\Microsoft Visual Studio\VC98\Include" <br>-i"d:\Program Files\Microsoft Visual Studio\VC98\atl\include" <br>-i"d:\Program Files\Microsoft Visual Studio\VC98\MFC\include"</em> </code>
    <li style="LIST-STYLE-TYPE: none"><span class=Apple-style-span style="WORD-SPACING: 0px; FONT: medium Simsun; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px">在std.lnt中的options.lnt属于新增文件，用于增删某些反映全局编译信息的选项。如"-e783"，用于关闭警告信息：当文件不是以空行结束时。</span>
    <li><span class=Apple-style-span style="WORD-SPACING: 0px; FONT: medium Simsun; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><span class=Apple-style-span style="FONT-SIZE: small; LINE-HEIGHT: 21px; FONT-FAMILY: verdana, sans-serif; TEXT-ALIGN: left; webkit-border-horizontal-spacing: 2px; webkit-border-vertical-spacing: 2px"><strong>整合到IDE</strong> <br>打开VC6菜单上的工具---&gt;定制部分，在工具选项卡中增加PC-Lint项，参数设置如下图所示：</span>&nbsp;<span class=Apple-style-span style="WORD-SPACING: 0px; FONT: medium Simsun; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><img height=363 alt="" src="http://www.cppblog.com/images/cppblog_com/ietj/PCLint-Options.jpg" width=578 border=0> <br></span></span>
    <li><span class=Apple-style-span style="WORD-SPACING: 0px; FONT: medium Simsun; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><span class=Apple-style-span style="WORD-SPACING: 0px; FONT: medium Simsun; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><strong style="COLOR: #0000ff">添加快捷键</strong> <span class=Apple-style-span style="WORD-SPACING: 0px; FONT: medium Simsun; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><span class=Apple-style-span style="WORD-SPACING: 0px; FONT: medium Simsun; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><br>打开工具菜单，首先看PC-Lint位于工具组中的很几项（我这里是第8项）,然后点击定制---&gt;键盘，在"分类"中选择工具，在命令中选择"UserTool8"，将光标移到新建快捷键中，此时在键盘上同时按下"CTRL+F12"键(注意看提示是否此快捷键已经使用)，点"OK"，就可以用CTRL+F12执行PC-LINT了</span> </span><br></span></span>
    <li><span class=Apple-style-span style="WORD-SPACING: 0px; FONT: medium Simsun; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><span class=Apple-style-span style="FONT-SIZE: small; LINE-HEIGHT: 21px; FONT-FAMILY: verdana, sans-serif; TEXT-ALIGN: left; webkit-border-horizontal-spacing: 2px; webkit-border-vertical-spacing: 2px"><strong>使用</strong> <br>设置完成后，在菜单的工具栏中就有了PC-Lint项了，对当前打开的C/C++文件，执行此项操作就可以在Output窗口中输出执行信息了，如下图所示：&nbsp;<img height=241 alt="" src="http://www.cppblog.com/images/cppblog_com/ietj/PCLint-Output.jpg" width=1003 border=0> <br>一切正常的话, return code为0,本文这里出现2个错误是由于使用了命名空间std,如不使用则正常，<span style="COLOR: #ff0000">目前也不知道什么原因</span>，main.cpp代码如下： <br>
    <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">1</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;<br></span><span style="COLOR: #008080">2</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;argc,&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;argv[])&nbsp;<br></span><span style="COLOR: #008080">3</span><span style="COLOR: #000000"><img id=Codehighlighter1_55_127_Open_Image onclick="this.style.display='none'; Codehighlighter1_55_127_Open_Text.style.display='none'; Codehighlighter1_55_127_Closed_Image.style.display='inline'; Codehighlighter1_55_127_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_55_127_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_55_127_Closed_Text.style.display='none'; Codehighlighter1_55_127_Open_Image.style.display='inline'; Codehighlighter1_55_127_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_55_127_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_55_127_Open_Text><span style="COLOR: #000000">{&nbsp;<br></span><span style="COLOR: #008080">4</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">)argc;&nbsp;<br></span><span style="COLOR: #008080">5</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">)argv;&nbsp;<br></span><span style="COLOR: #008080">6</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>std::cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Hello,&nbsp;World!\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;&nbsp;<br></span><span style="COLOR: #008080">7</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;<br></span><span style="COLOR: #008080">8</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">&nbsp;</span></div>
    </span></span>
    <li><span class=Apple-style-span style="WORD-SPACING: 0px; FONT: medium Simsun; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><span class=Apple-style-span style="FONT-SIZE: small; LINE-HEIGHT: 21px; FONT-FAMILY: verdana, sans-serif; TEXT-ALIGN: left; webkit-border-horizontal-spacing: 2px; webkit-border-vertical-spacing: 2px"><strong>更多参考</strong> <br><span class=Apple-style-span style="WORD-SPACING: 0px; FONT: medium Simsun; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><span class=Apple-style-span style="FONT-SIZE: 12px; LINE-HEIGHT: 18px; FONT-FAMILY: verdana, sans-serif; TEXT-ALIGN: left">a. <a href="http://blog.csdn.net/minico/archive/2007/09/07/1775554.aspx">如何在Source Insight中配置PC-Lint</a> <br><span class=Apple-style-span style="WORD-SPACING: 0px; FONT: medium Simsun; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><span class=Apple-style-span style="FONT-SIZE: 12px; LINE-HEIGHT: 18px; FONT-FAMILY: verdana, sans-serif; TEXT-ALIGN: left">b. <a href="http://campus.chsi.com.cn/xy/com/200801/20080116/3689197.html">在IDE中PC-Lint整个项目文件</a> </span></span></span></span></span></span><br><span class=Apple-style-span style="WORD-SPACING: 0px; FONT: medium Simsun; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><span class=Apple-style-span style="FONT-SIZE: small; LINE-HEIGHT: 21px; FONT-FAMILY: verdana, sans-serif; TEXT-ALIGN: left; webkit-border-horizontal-spacing: 2px; webkit-border-vertical-spacing: 2px"><span class=Apple-style-span style="WORD-SPACING: 0px; FONT: medium Simsun; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><span class=Apple-style-span style="FONT-SIZE: 12px; LINE-HEIGHT: 18px; FONT-FAMILY: verdana, sans-serif; TEXT-ALIGN: left"><span class=Apple-style-span style="WORD-SPACING: 0px; FONT: medium Simsun; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><span class=Apple-style-span style="FONT-SIZE: 12px; LINE-HEIGHT: 18px; FONT-FAMILY: verdana, sans-serif; TEXT-ALIGN: left">c. <span style="FONT-FAMILY: '微软雅黑','黑体',Arial,Helvetica,Sans-Serif"><a title="PCLint 在VC6.0下的配置使用" href="http://linpder.blog.163.com/blog/static/487641020080272143730/"><span style="FONT-FAMILY: '微软雅黑','黑体',Arial,Helvetica,Sans-Serif">PCLint 在VC6.0下的配置使用</span></a></span></span></span></span></span></span></span> </li>
</ol>
<img src ="http://www.cppblog.com/ietj/aggbug/100620.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ietj/" target="_blank">一路风尘</a> 2009-11-10 15:29 <a href="http://www.cppblog.com/ietj/archive/2009/11/10/100620.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++ 资源释放</title><link>http://www.cppblog.com/ietj/archive/2009/10/23/99287.html</link><dc:creator>一路风尘</dc:creator><author>一路风尘</author><pubDate>Fri, 23 Oct 2009 06:50:00 GMT</pubDate><guid>http://www.cppblog.com/ietj/archive/2009/10/23/99287.html</guid><wfw:comment>http://www.cppblog.com/ietj/comments/99287.html</wfw:comment><comments>http://www.cppblog.com/ietj/archive/2009/10/23/99287.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/ietj/comments/commentRss/99287.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ietj/services/trackbacks/99287.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 在Windows编程中，GDI资源的泄露一直是需要引起C++程序员的高度关注，一不小心，就会在函数的中途正常退出或者中途抛出异常退出的地方遗忘掉释放前面申请的资源。本人也曾多次碰到这种问题，查阅了网上的资料，总是不能得到满意的解决。最近看了下boost中的库，才略有收获，也算是抛砖引玉吧。<br>&nbsp;&nbsp;&nbsp; 要想解决上面的问题，就必须实现资源的自动释放，类的析构函数正好可以满足此要求，就象标准库中智能指针就是这么实现的，但问题在于我们的参数个数，参数类型的不确定性。虽然重载和模板可以解决此问题(这也是我在网上看到的解决方法)，但模板类的参数不具备自动推导能力（经传入成员函数参数值推导出模板参数类型），而且过多的模板偏特化也不是我所擅长的，最主要是代码的移植性无法保证。<br>&nbsp;&nbsp;&nbsp; 本文主要利用的boost中的bind库，觉得仿函数的功能跟自己当前的需求不远了，因为它们的共同点有:<br>1. 可以接收任意多个模板参数(没有具体验证，至少是9个吧),<br>2. 可以利用函数对模板参数类型的推导能力，省去了参数类型的指定。<br>唯一不同的是bind后的仿函数是立即执行，不能具有类的析构函数自动执行的优点。目前需要解决的问题是推迟执行期，也既把operator()函数移到析构函数中执行，这就需要保存boost::bind(....)返回的对象，通过类的构造函数去保存，然后在析构函数中执行operator()就可以了。<br>&nbsp;&nbsp;&nbsp; 思路是出来了，但问题是boost::bind(...)函数返回的类型不确定，对象通过类模板是可以保存，但类没有自动推导能力，还是无法实现，这里我就利用了boost::any的原理，正好解决了此问题，而且它也可以用于函数的延迟执行。详见以下使用方法：<br>步骤1： 实现类似于boost:;any的类，主要完成资源的自动释放。实现如下:<br>//SrcRelease.h头文件<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">#ifndef&nbsp;_SRCRELEASE_INC_<br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;_SRCRELEASE_INC_</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;CSrcRelease<br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #000000"><img id=Codehighlighter1_69_629_Open_Image onclick="this.style.display='none'; Codehighlighter1_69_629_Open_Text.style.display='none'; Codehighlighter1_69_629_Closed_Image.style.display='inline'; Codehighlighter1_69_629_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_69_629_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_69_629_Closed_Text.style.display='none'; Codehighlighter1_69_629_Open_Image.style.display='inline'; Codehighlighter1_69_629_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_69_629_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_69_629_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:&nbsp;<br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;template</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">typename&nbsp;T</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;CSrcRelease(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;T&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;value)<br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;m_pHelder(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Helder</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">T</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">(value))<br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img id=Codehighlighter1_184_190_Open_Image onclick="this.style.display='none'; Codehighlighter1_184_190_Open_Text.style.display='none'; Codehighlighter1_184_190_Closed_Image.style.display='inline'; Codehighlighter1_184_190_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_184_190_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_184_190_Closed_Text.style.display='none'; Codehighlighter1_184_190_Open_Image.style.display='inline'; Codehighlighter1_184_190_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_184_190_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_184_190_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">CSrcRelease()<br></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img id=Codehighlighter1_216_248_Open_Image onclick="this.style.display='none'; Codehighlighter1_216_248_Open_Text.style.display='none'; Codehighlighter1_216_248_Closed_Image.style.display='inline'; Codehighlighter1_216_248_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_216_248_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_216_248_Closed_Text.style.display='none'; Codehighlighter1_216_248_Open_Image.style.display='inline'; Codehighlighter1_216_248_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_216_248_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_216_248_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;m_pHelder;<br></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">:&nbsp;<br></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;IHelder<br></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img id=Codehighlighter1_283_331_Open_Image onclick="this.style.display='none'; Codehighlighter1_283_331_Open_Text.style.display='none'; Codehighlighter1_283_331_Closed_Image.style.display='inline'; Codehighlighter1_283_331_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_283_331_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_283_331_Closed_Text.style.display='none'; Codehighlighter1_283_331_Open_Image.style.display='inline'; Codehighlighter1_283_331_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_283_331_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_283_331_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img id=Codehighlighter1_324_325_Open_Image onclick="this.style.display='none'; Codehighlighter1_324_325_Open_Text.style.display='none'; Codehighlighter1_324_325_Closed_Image.style.display='inline'; Codehighlighter1_324_325_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_324_325_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_324_325_Closed_Text.style.display='none'; Codehighlighter1_324_325_Open_Image.style.display='inline'; Codehighlighter1_324_325_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">IHelder()&nbsp;</span><span id=Codehighlighter1_324_325_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_324_325_Open_Text><span style="COLOR: #000000">{}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">25</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;template</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">typename&nbsp;T</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">26</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Helder&nbsp;:&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;IHelder<br></span><span style="COLOR: #008080">27</span><span style="COLOR: #000000"><img id=Codehighlighter1_398_601_Open_Image onclick="this.style.display='none'; Codehighlighter1_398_601_Open_Text.style.display='none'; Codehighlighter1_398_601_Closed_Image.style.display='inline'; Codehighlighter1_398_601_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_398_601_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_398_601_Closed_Text.style.display='none'; Codehighlighter1_398_601_Open_Image.style.display='inline'; Codehighlighter1_398_601_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_398_601_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_398_601_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">28</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:&nbsp;<br></span><span style="COLOR: #008080">29</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Helder(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;T&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;value)<br></span><span style="COLOR: #008080">30</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;held(value)<br></span><span style="COLOR: #008080">31</span><span style="COLOR: #000000"><img id=Codehighlighter1_479_489_Open_Image onclick="this.style.display='none'; Codehighlighter1_479_489_Open_Text.style.display='none'; Codehighlighter1_479_489_Closed_Image.style.display='inline'; Codehighlighter1_479_489_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_479_489_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_479_489_Closed_Text.style.display='none'; Codehighlighter1_479_489_Open_Image.style.display='inline'; Codehighlighter1_479_489_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_479_489_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_479_489_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">32</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">33</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">Helder()&nbsp;<br></span><span style="COLOR: #008080">34</span><span style="COLOR: #000000"><img id=Codehighlighter1_518_548_Open_Image onclick="this.style.display='none'; Codehighlighter1_518_548_Open_Text.style.display='none'; Codehighlighter1_518_548_Closed_Image.style.display='inline'; Codehighlighter1_518_548_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_518_548_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_518_548_Closed_Text.style.display='none'; Codehighlighter1_518_548_Open_Image.style.display='inline'; Codehighlighter1_518_548_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_518_548_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_518_548_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">35</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;held();<br></span><span style="COLOR: #008080">36</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">37</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">38</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;representation</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">39</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;T&nbsp;held;<br></span><span style="COLOR: #008080">40</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">41</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">42</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;IHelder</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;m_pHelder;<br></span><span style="COLOR: #008080">43</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">44</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">45</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">#endif</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">_SRCRELEASE_INC_&nbsp;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">46</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<br>步骤2： 下载boost库，因为只用到了boost::bind库，所以无需编译. 将头文件目录加入vs2005中。<br>步骤3： 客户端调用<br>//main.cpp<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">SrcRelease.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">Windows.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">boost</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">bind.hpp</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">cassert</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;_stdcall&nbsp;InvokeStr(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;szValue)<br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img id=Codehighlighter1_156_193_Open_Image onclick="this.style.display='none'; Codehighlighter1_156_193_Open_Text.style.display='none'; Codehighlighter1_156_193_Closed_Image.style.display='inline'; Codehighlighter1_156_193_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_156_193_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_156_193_Closed_Text.style.display='none'; Codehighlighter1_156_193_Open_Image.style.display='inline'; Codehighlighter1_156_193_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_156_193_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_156_193_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;std::cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">szValue</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">std::endl;<br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;_stdcall&nbsp;InvokeStr(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;szValue,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;a,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;b)<br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img id=Codehighlighter1_255_335_Open_Image onclick="this.style.display='none'; Codehighlighter1_255_335_Open_Text.style.display='none'; Codehighlighter1_255_335_Closed_Image.style.display='inline'; Codehighlighter1_255_335_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_255_335_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_255_335_Closed_Text.style.display='none'; Codehighlighter1_255_335_Open_Image.style.display='inline'; Codehighlighter1_255_335_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_255_335_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_255_335_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;std::cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">szValue</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\ta:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">a</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\tb:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">b</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">std::endl;<br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img id=Codehighlighter1_349_1009_Open_Image onclick="this.style.display='none'; Codehighlighter1_349_1009_Open_Text.style.display='none'; Codehighlighter1_349_1009_Closed_Image.style.display='inline'; Codehighlighter1_349_1009_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_349_1009_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_349_1009_Closed_Text.style.display='none'; Codehighlighter1_349_1009_Open_Image.style.display='inline'; Codehighlighter1_349_1009_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_349_1009_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_349_1009_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">由于API都是_stdcall调用，而vs2005环境都是默认_cdecl，所以需要修改vs2005环境</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">21</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;HBITMAP&nbsp;hBitmap</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">reinterpret_cast</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">HBITMAP</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">(LoadImage(NULL,&nbsp;L</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">test.bmp</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;IMAGE_BITMAP,&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;LR_LOADFROMFILE));<br></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;assert(hBitmap</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">NULL);<br></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;CSrcRelease&nbsp;aBitmapRelease(boost::bind(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">DeleteObject,&nbsp;hBitmap));<br></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">25</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;std::cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Invoke&nbsp;Outer&nbsp;Before</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">std::endl;<br></span><span style="COLOR: #008080">26</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;CSrcRelease&nbsp;aRelease(boost::bind(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">InvokeStr,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Invoke&nbsp;Outer&nbsp;After</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">8</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">));<br></span><span style="COLOR: #008080">27</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">28</span><span style="COLOR: #000000"><img id=Codehighlighter1_754_943_Open_Image onclick="this.style.display='none'; Codehighlighter1_754_943_Open_Text.style.display='none'; Codehighlighter1_754_943_Closed_Image.style.display='inline'; Codehighlighter1_754_943_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_754_943_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_754_943_Closed_Text.style.display='none'; Codehighlighter1_754_943_Open_Image.style.display='inline'; Codehighlighter1_754_943_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_754_943_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_754_943_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">29</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Invoke&nbsp;Inner&nbsp;Before</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">std::endl;<br></span><span style="COLOR: #008080">30</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CSrcRelease&nbsp;aRelease(boost::bind(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">InvokeStr,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Invoke&nbsp;Inner&nbsp;After</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">));<br></span><span style="COLOR: #008080">31</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Invoke&nbsp;Inner&nbsp;Middle</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">std::endl;<br></span><span style="COLOR: #008080">32</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">33</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">34</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;std::cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Invoke&nbsp;Outer&nbsp;Middle</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">std::endl;<br></span><span style="COLOR: #008080">35</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">36</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">&nbsp;</span></div>
<br>以上代码在winxp+vs2005下测试通过，如有疑问，欢迎联系: <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#105;&#101;&#116;&#106;&#64;&#109;&#97;&#105;&#108;&#46;&#50;&#49;&#99;&#110;&#46;&#99;&#111;&#109;">ietj@mail.21cn.com</a><br>&nbsp;<br>&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;&nbsp;&nbsp;&nbsp;&nbsp; 哓月刀<br>&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;&nbsp;&nbsp;&nbsp;&nbsp; 2008.3.5
<img src ="http://www.cppblog.com/ietj/aggbug/99287.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ietj/" target="_blank">一路风尘</a> 2009-10-23 14:50 <a href="http://www.cppblog.com/ietj/archive/2009/10/23/99287.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++错误处理</title><link>http://www.cppblog.com/ietj/archive/2008/03/01/43542.html</link><dc:creator>一路风尘</dc:creator><author>一路风尘</author><pubDate>Sat, 01 Mar 2008 15:28:00 GMT</pubDate><guid>http://www.cppblog.com/ietj/archive/2008/03/01/43542.html</guid><wfw:comment>http://www.cppblog.com/ietj/comments/43542.html</wfw:comment><comments>http://www.cppblog.com/ietj/archive/2008/03/01/43542.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ietj/comments/commentRss/43542.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ietj/services/trackbacks/43542.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; &#8220;C++的一个问题是有太多的库，但是没有一个大卖场有所有这些库。C++不是对GUI支持不好。C++有GUI库。问题是C++有25个GUI库。有些 GUI库不错。但是人们说：&#8220;可是C++没有标准GUI库。&#8221;Python不一样。人们知道到哪里去找Python的GUI库。所以C++的问题是有太多库，但是所有的库市场宣传都做的不够（It's a problem of riches, plurality, and a lack of marketing）。搞C++的看来都很穷，没有钱来提供一个可以找到所有库的大卖场。&#8221;<br>&nbsp;&nbsp;&nbsp; 以上摘自在2003年9月的JAOO会议上，Bill Venners对Bjarne Stroustrup采访，我想，这样的局面也导致了目前C++对错误没有一个统一的处理方式，不象JAVA可以统一采用异常的错误处理方式（我曾看过经JMS重写 的CMS--ActiveMQ CMS，里面一律采用异常，包括构造/析构函数），因为它需要兼顾C/C++/SDK中各自不同的错误处理方式。 <br>&nbsp;&nbsp;&nbsp; 不应该发生的错误如果发生了，那就是程序员的过错，此时就该使用ASSERT断言了。<br>&nbsp;&nbsp;&nbsp; 不能用抛出异常来代替断言。<br>&nbsp; &nbsp; 断言采用如下形式:<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">1</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">unsigned&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;Employee::GetID()<br></span><span style="COLOR: #008080">2</span><span style="COLOR: #000000"><img id=Codehighlighter1_31_115_Open_Image onclick="this.style.display='none'; Codehighlighter1_31_115_Open_Text.style.display='none'; Codehighlighter1_31_115_Closed_Image.style.display='inline'; Codehighlighter1_31_115_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_31_115_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_31_115_Closed_Text.style.display='none'; Codehighlighter1_31_115_Open_Image.style.display='inline'; Codehighlighter1_31_115_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_31_115_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_31_115_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">3</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;assert(m_nID</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Employed&nbsp;ID&nbsp;is&nbsp;invalid(must&nbsp;be&nbsp;nonzero</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">4</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;m_nID;<br></span><span style="COLOR: #008080">5</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<br>附C++错误处理相关文章:<br>http://msdn2.microsoft.com/zh-cn/library/ms809695.aspx (考虑错误情况)<br>http://blog.csdn.net/pongba/archive/2007/10/08/1815742.aspx（错误处理(Error-Handling)：为何、何时、如何）<br>《&nbsp;<font color=#cc0033>契约式设计</font>的理解及其在c/c++中的应用》<br>Robert Schmidt《C与C++中的异常处理》<br><br>
<img src ="http://www.cppblog.com/ietj/aggbug/43542.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ietj/" target="_blank">一路风尘</a> 2008-03-01 23:28 <a href="http://www.cppblog.com/ietj/archive/2008/03/01/43542.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>个人编程习惯</title><link>http://www.cppblog.com/ietj/archive/2008/02/29/43498.html</link><dc:creator>一路风尘</dc:creator><author>一路风尘</author><pubDate>Fri, 29 Feb 2008 14:34:00 GMT</pubDate><guid>http://www.cppblog.com/ietj/archive/2008/02/29/43498.html</guid><wfw:comment>http://www.cppblog.com/ietj/comments/43498.html</wfw:comment><comments>http://www.cppblog.com/ietj/archive/2008/02/29/43498.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ietj/comments/commentRss/43498.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ietj/services/trackbacks/43498.html</trackback:ping><description><![CDATA[1. 头文件宏定义: 采用_项目名称头字母+_文件名+_INC_<br>&nbsp;&nbsp; eg: 项目ImageView下的ImageInfo.h文件定义为_IV_IMAGEINFO_INC_<br><br>2. 文件包含:同名头文件+自定义头文件+第三方库头文件+编译器头文件(STL+CRT+SDK)<br>&nbsp;&nbsp; eg: 项目ImageView下的ImageInfo.cpp头文件包含顺序如下<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">ImageInfo.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">myLib/config.hpp</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">myLib</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">boost</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">boost.hpp</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">boost</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">stl</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">process.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">libc.lib</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">windows.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">sdk</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;#pragma&nbsp;comment(lib,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">libc.lib</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)&nbsp;</span></div>
<br>&lt;待续&gt;<br><br>
<img src ="http://www.cppblog.com/ietj/aggbug/43498.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ietj/" target="_blank">一路风尘</a> 2008-02-29 22:34 <a href="http://www.cppblog.com/ietj/archive/2008/02/29/43498.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>