﻿<?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++博客-Code Knight-随笔分类-C++与编程之道</title><link>http://www.cppblog.com/winmain/category/9481.html</link><description>Programming is so cool</description><language>zh-cn</language><lastBuildDate>Thu, 15 Apr 2010 03:35:48 GMT</lastBuildDate><pubDate>Thu, 15 Apr 2010 03:35:48 GMT</pubDate><ttl>60</ttl><item><title>一道面试题</title><link>http://www.cppblog.com/winmain/archive/2010/04/12/112332.html</link><dc:creator>Code Knight</dc:creator><author>Code Knight</author><pubDate>Mon, 12 Apr 2010 07:55:00 GMT</pubDate><guid>http://www.cppblog.com/winmain/archive/2010/04/12/112332.html</guid><wfw:comment>http://www.cppblog.com/winmain/comments/112332.html</wfw:comment><comments>http://www.cppblog.com/winmain/archive/2010/04/12/112332.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/winmain/comments/commentRss/112332.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/winmain/services/trackbacks/112332.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 最近面试遇到一道很怀念的题目，约瑟夫环，由于代码较多没有当时写在卷上，说了说思路，下来用模板实现了一下，使用双向循环链表，每到第五个kick out。注：模板未考虑非常规自定义类型的浅拷贝问题；另外代码没有优化，delnode效率有提升空间，有兴趣的改改看。&nbsp;&nbsp;1template&lt;class&nbsp;T&gt;&nbsp;&nbsp;2struct&nbsp;SNo...&nbsp;&nbsp;<a href='http://www.cppblog.com/winmain/archive/2010/04/12/112332.html'>阅读全文</a><img src ="http://www.cppblog.com/winmain/aggbug/112332.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/winmain/" target="_blank">Code Knight</a> 2010-04-12 15:55 <a href="http://www.cppblog.com/winmain/archive/2010/04/12/112332.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>total commader插件编写</title><link>http://www.cppblog.com/winmain/archive/2010/02/19/108069.html</link><dc:creator>Code Knight</dc:creator><author>Code Knight</author><pubDate>Fri, 19 Feb 2010 06:53:00 GMT</pubDate><guid>http://www.cppblog.com/winmain/archive/2010/02/19/108069.html</guid><wfw:comment>http://www.cppblog.com/winmain/comments/108069.html</wfw:comment><comments>http://www.cppblog.com/winmain/archive/2010/02/19/108069.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/winmain/comments/commentRss/108069.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/winmain/services/trackbacks/108069.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;休息了将近十天左右，代码的东西一点都没摸，完全脱离出代码的世界，有时觉得程序员不应该总沉浸于自己的代码世界，这段时间走走看看，把脑子打开去体会更多的东西，感受到以前自娱自乐的那种渺小，人应该有张有弛的，什么事情都不能过度，该做什么的时候绝对不要想着不该去想的东西，活在当下，才是幸福。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;新的一年，要开始工作了，今天看看自己的电脑，感觉好乱，想把所有的资料全扔进Total commander里，也想写一些插件来做一些额外的工作，比如把电影音乐打上tag或写上评论待以后方便查看等，先存一篇文章，以后有空的时候动手做这些事情的时候也许有用。<br><br>/////////////////////////////////////////////////////////////////////////////////////////////////////////////华丽分割线<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;应nevermind版主之约，写了<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>开发的一个Guild，简单介绍了如何为TC开发一个<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>以及<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>的基本工作过程，仅仅是一个入门介绍，详细的编程细节需要从网上下载帮助，下面文章中都给出了下载地址。<br><br>首先声明，本文撰写背景是TC 6.03a，6.5会加入新的<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>内容，但估计向下兼容应该是没有问题的。<br>众所周知，TC的<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>现在分为3类，Lister<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>（.wlx）、FileSystem<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>（.wfx）和Packer<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>（.wcx）（另外还有传说中6.5新加的Content<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>（.wdx），现在还不见庐山真面目，先按下不表）。尽管扩展名穿上了不同的马甲，但其本质都是一样的，都是Windows的DLL动态链接库，我们需要做的仅仅是按照TC的规范，实现其给定的DLL接口函数，最后把 dll扩展名改成相应扩展名就万事大吉了（使用不同的扩展名，只不过使其容易区分而已）。<br><br>1. 开发方法、环境和工具<br>如前所述，TC<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>本质上都是Windows的DLL动态链接库，其开发方法和普通的DLL程序开发并没有什么不同，任何一个可用来开发DLL的环境和工具都可以用来开发TC<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>。<br>因此，写TC<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>首先得熟悉DLL的<strong style="BACKGROUND-COLOR: rgb(255,153,153); COLOR: black">编写</strong>，更高一点的要求是熟悉一些常用的Windows API，对于一个程序员老手来说应该是很容易的事情，而用什么开发环境和工具都是次要的。但是对于新手，笔者推荐使用VC或者Delphi来<strong style="BACKGROUND-COLOR: rgb(255,153,153); COLOR: black">编写</strong>，一方面的原因是TC作者提供的函数头文件声明只有C/C++和Pascal，可以省却改写成别的语言的麻烦；另一方面原因是TC作者给的帮助、例子，甚至网上公开源码的<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>大都是基于此两种环境的，而有一个可参考的源码例子能在很大程度上提供<strong style="BACKGROUND-COLOR: rgb(255,153,153); COLOR: black">编写</strong>帮助。另外由于TC作者提供的例子（VC环境下）已经搭建起了 <strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>的整个框架，我们甚至可以直接在此例子上修改开发。<br><br>Lister<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>的官方源码例子：http://ghisler.fileburst.com/lsplugins/listplugsample.zip。<br>FS<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>的官方源码例子：http://ghisler.fileburst.com/fsplugins/sampleplugin.zip。<br>其它第3方<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>的源码例子可以从以下各个<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>站点找到：<br>http://www.ghisler.com/plugins.htm<br>http://www.<span class=ColorResultsClass alpha-value="20" realoffset="833" highlight="true">total</span>cmd.net<br>http://club<span class=ColorResultsClass alpha-value="20" realoffset="851" highlight="true">total</span>.free.fr<br><br>2. Lister <strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong><br>首先说明一下Lister<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>的工作过程：默认快捷键情况下，当在TC中对一个文件按下F3或者Ctrl+Q的时候，TC会检查wincmd.ini中[ListerPlugins]一节，以下是个例子：<br>[ListerPlugins]<br>0=%<span class=ColorResultsClass alpha-value="20" realoffset="1050" highlight="true">COMMANDER</span>_PATH%\plugins\Imagine\Imagine.wlx<br>0_detect="MULTIMEDIA"<br>1=%<span class=ColorResultsClass alpha-value="20" realoffset="1086" highlight="true">COMMANDER</span>_PATH%\plugins\FlashView\FlashView.wlx<br>1_detect="([0]="F" &amp; [1]="W" &amp; [2]="S")|([0]="C" &amp; [1]="W" &amp; [2]="S")"<br><br>TC会顺序检查该节中每个<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>对应的x_detect字段，该字段实际上是一个逻辑判断表达式，如果此表达式结果为真，TC就会Load该<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>并调用其ListLoad函数，否则检查下一个<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>。如果<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>对应的x_detect字段根本就不存在，TC会调 用<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>的ListGetDetectString函数，如果此函数存在，TC会将函数的返回结果保存在x_detect字段中再检查，如果此函数仍然不存在，则TC就直接调用<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>的ListLoad函数。最后，如果调用了ListLoad函数，还要判断该 函数的返回值，如果该值是一个Windows句柄，则<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>调用成功；若返回值为0（NULL），则调用失败，继续检查下一个<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>。<br><br>Lister<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>的详细接口函数介绍可以从网上下到：http://ghisler.fileburst.com/lsplugins/listplughelp1.2.zip。<br><br>实际上，Lister<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>必需的函数只有ListLoad一个，它是<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>的核心实现函数。<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>必须在此函数中读入文件内容，创建一个窗口并显示文件内容，最后返回这个窗口的句柄，Lister会获得并Subclass该句柄，并在Lister内显示。<br><br>其余的接口函数都是可选函数，但其中有两个比较重要的函数：ListGetDetectString和ListCloseWindow，这两个函数与ListLoad一起构成了<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>的主干部分。<br><br>ListGetDetectString虽然是可选函数，但是我强烈建议实现这个函数，这对Lister的效率有很大的影响。从Lister工作过程可以看出，这个函数仅仅是在<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>第一次被调用时才被调用，功能是返回一个检测字符串以填写x_detec t字段，在此之后，Lister都将只检查此字段以决定是否调用<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>。因此，一个好的检测字符串可以让Lister迅速判断<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>是否适用于显示文件，如果没有这个，Lister每次显示文件都将不得不把<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>一个个都Load进来、分配空间、调用ListL oad，直到找到一个合适的，这个速度可是偏离了Lister快速查看的本意。例如：检测字符串是&#8220;ext="HTM" | ext="HTML"&#8221;，这时TC只需要根据文件扩展名是否是htm或html就可以直接判断该<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>是否适合，而无需读入任何文件，这就是为什么在<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>众多的时候，Lister仍然能很快显示的原因。当然，在某些情况下，确实难以给出一个合适的检测字符串，这就要求ListL oad函数在文件类型判断上的速度应该尽可能快。<br><br>ListColseWindow是在用户关闭Lister或在Lister中显示另一个文件时被调用，如果此函数不存在，Lister将直接调用DestroyWindow()关闭<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>窗口。通常情况下，我们需要在这里做窗口关闭时的善后工作，包括释放 资源等等。<br><br>除以上3个函数外，其它的几个可选函数都涉及一些具体的附加功能，取决于具体需求。<br><br>2. FileSystem<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong><br>与Lister<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>不同，当用户安装一个FS<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>时，该<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>就会被第一次Load进来，并调用FsGetDefRootName以获得<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>名称，也是该FS根目录的名字，如果这个函数不存在，TC会直接使用wfx文件的名字做<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>名称（去掉文件扩展名） ，该名称会保存在wincmd.ini文件[FileSystemPlugins]一节，下面是个例子：<br>[FileSystemPlugins]<br>Linux-drives=%<span class=ColorResultsClass alpha-value="20" realoffset="1825" highlight="true">COMMANDER</span>_PATH%\plugins\ex2fs\ex2fs.wfx<br>Calendar=%<span class=ColorResultsClass alpha-value="20" realoffset="1843" highlight="true">COMMANDER</span>_PATH%\plugins\calendar\calendar.wfx<br>Shared files=%<span class=ColorResultsClass alpha-value="20" realoffset="1861" highlight="true">COMMANDER</span>_PATH%\plugins\netmon\NetMon.wfx<br>这样，当用户进入网上邻居时，TC不需要Load<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>就可以把所有<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>列出来，<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>只有在用户试图进入FS<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>目录时才真正被Load进来。<br><br>大致结构上，FS<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>需要提供的接口函数与一个真正文件系统的基本函数有些类似。其必需的函数有4个：FsInit、FsFindFirst、FsFindNext和 FsFindClose，是不是看了很眼熟，就和平时列举一个目录下所有文件所用的函数 结构一样。顾名思义，FsInit是用于<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>初始化的函数，同时TC会传给<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>3个TC提供给FS<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>调用的callback函数地址（下面会介绍）；FsFindFirst和FsFindNext用于列举一个目录下所有的文件；FsFindClose用 于终止FsFindFirst/FsFindNext的文件列举。有了这4个函数，就构成了最小的FS<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>，就可以浏览FS<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>的各个目录了。<br><br>有了文件目录结构后，就到了根据需要提供各种文件功能的时候了，包括删除文件FsDeleteFile；删除目录FsRemoveDir；建立目录 FsMkDir；执行文件FsExecuteFile；设置文件属性FsSetAttr；设置文件时间Fs SetTime；拷贝文件FsGetFile/FsPutFile/FsRenMovFile。大致上都和普通文件操作功能差不多，需要说明的是拷贝文件，由于FS<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>的特殊性，拷贝文件分成了3种情况：FsGetFile是从FS中往本地硬盘拷贝；FsPutFile是从本地硬盘往FS拷贝；FsRenMovFile是 在FS内部拷贝、移动或重命名文件。<br><br>此外，根据FS<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>的需要，TC还提供了3个callback函数以供其调用：<br>1) ProgressProc，用于显示一个进度条，例如拷贝文件时的进度条。 <br>2) LogProc，用于显示FTP工具栏，<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>可以在工具栏中显示log信息，并写入log文件。如果显示了FTP工具栏，点击&#8220;断开连接&#8221;按钮时还将调用<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>的FsDisconnect函数。<br>3) RequestProc，用于显示一个输入对话框，例如要求用户输入用户名和密码等等。<br><br>最后，FS<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>还可以实现一个函数FsStatusInfo，如果这个函数被实现，TC在调用<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>的任何函数（除了FsInit和FsDisconnect）之前和之后都将调用此函数，以方便<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>释放资源等等操作。<br><br>FS<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>的详细接口函数介绍可以从网上下载：http://ghisler.fileburst.com/fsplugins/fspluginhelp1.3.zip。<br><br>2. FileSystem<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong><br>与Lister<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>不同，当用户安装一个FS<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>时，该<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>就会被第一次Load进来，并调用FsGetDefRootName以获得<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>名称，也是该FS根目录的名字，如果这个函数不存在，TC会直接使用wfx文件的名字做<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>名称（去掉文件扩展名） ，该名称会保存在wincmd.ini文件[FileSystemPlugins]一节，下面是个例子：<br>[FileSystemPlugins]<br>Linux-drives=%<span class=ColorResultsClass alpha-value="20" realoffset="1825" highlight="true">COMMANDER</span>_PATH%\plugins\ex2fs\ex2fs.wfx<br>Calendar=%<span class=ColorResultsClass alpha-value="20" realoffset="1843" highlight="true">COMMANDER</span>_PATH%\plugins\calendar\calendar.wfx<br>Shared files=%<span class=ColorResultsClass alpha-value="20" realoffset="1861" highlight="true">COMMANDER</span>_PATH%\plugins\netmon\NetMon.wfx<br>这样，当用户进入网上邻居时，TC不需要Load<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>就可以把所有<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>列出来，<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>只有在用户试图进入FS<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>目录时才真正被Load进来。<br><br>大致结构上，FS<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>需要提供的接口函数与一个真正文件系统的基本函数有些类似。其必需的函数有4个：FsInit、FsFindFirst、FsFindNext和 FsFindClose，是不是看了很眼熟，就和平时列举一个目录下所有文件所用的函数 结构一样。顾名思义，FsInit是用于<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>初始化的函数，同时TC会传给<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>3个TC提供给FS<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>调用的callback函数地址（下面会介绍）；FsFindFirst和FsFindNext用于列举一个目录下所有的文件；FsFindClose用 于终止FsFindFirst/FsFindNext的文件列举。有了这4个函数，就构成了最小的FS<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>，就可以浏览FS<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>的各个目录了。<br><br>有了文件目录结构后，就到了根据需要提供各种文件功能的时候了，包括删除文件FsDeleteFile；删除目录FsRemoveDir；建立目录 FsMkDir；执行文件FsExecuteFile；设置文件属性FsSetAttr；设置文件时间Fs SetTime；拷贝文件FsGetFile/FsPutFile/FsRenMovFile。大致上都和普通文件操作功能差不多，需要说明的是拷贝文件，由于FS<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>的特殊性，拷贝文件分成了3种情况：FsGetFile是从FS中往本地硬盘拷贝；FsPutFile是从本地硬盘往FS拷贝；FsRenMovFile是 在FS内部拷贝、移动或重命名文件。<br><br>此外，根据FS<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>的需要，TC还提供了3个callback函数以供其调用：<br>1) ProgressProc，用于显示一个进度条，例如拷贝文件时的进度条。 <br>2) LogProc，用于显示FTP工具栏，<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>可以在工具栏中显示log信息，并写入log文件。如果显示了FTP工具栏，点击&#8220;断开连接&#8221;按钮时还将调用<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>的FsDisconnect函数。<br>3) RequestProc，用于显示一个输入对话框，例如要求用户输入用户名和密码等等。<br><br>最后，FS<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>还可以实现一个函数FsStatusInfo，如果这个函数被实现，TC在调用<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>的任何函数（除了FsInit和FsDisconnect）之前和之后都将调用此函数，以方便<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>释放资源等等操作。<br><br>FS<strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">插件</strong>的详细接口函数介绍可以从网上下载：http://ghisler.fileburst.com/fsplugins/fspluginhelp1.3.zip。 
<img src ="http://www.cppblog.com/winmain/aggbug/108069.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/winmain/" target="_blank">Code Knight</a> 2010-02-19 14:53 <a href="http://www.cppblog.com/winmain/archive/2010/02/19/108069.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ZT-剑道与编程之道</title><link>http://www.cppblog.com/winmain/archive/2009/04/15/80075.html</link><dc:creator>Code Knight</dc:creator><author>Code Knight</author><pubDate>Wed, 15 Apr 2009 14:53:00 GMT</pubDate><guid>http://www.cppblog.com/winmain/archive/2009/04/15/80075.html</guid><wfw:comment>http://www.cppblog.com/winmain/comments/80075.html</wfw:comment><comments>http://www.cppblog.com/winmain/archive/2009/04/15/80075.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/winmain/comments/commentRss/80075.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/winmain/services/trackbacks/80075.html</trackback:ping><description><![CDATA[剑道, 只是我从小到大从各种各样的媒体中得出的印象. 　　<br><br>因为喜欢剑术, 所以想做一个剑客. 在还没有做剑客时, 就想像自己有一把好剑, 威风凛凛地站在风中, 身边的树叶飘飘......, 一幅很酷的样子. 做了剑客后发现, 想找一把好剑不容易, 于是, 行侠江湖的几年中, 在找一把好剑. <br>　　<br>终于过了几年, 有点胡子了, 有个和尚或老道看你有几分仁义的样子, 指了个好剑的方向. 结果, 你以前做梦都在想像的举剑一睹出现了, 当然, 是给自己看的, 注意, 要披一件大衣, 找个风口, 别忘了边上该有很多枯叶.POS摆完, 也该练点真功夫了, 要不真浪费了这么多年的追求, 又被别人数落个"金玉其表"的评价. 于是你练呀练呀, 总算有一天, 有一个你不认识的人叫了你一声"高手". 听第一遍时你还以为他在叫别人. 那天晚上你睡觉都在偷笑. 　　<br><br>然后, 你发现与人交手时, 的确顺手了很多. 每与一个曾经的对手交手后,你的信心都更增加一份. 你非常的爱护那把剑, 所以你常在无人的时候, 在林子里舞剑, 学习怎样提高你的剑气. 日子又过了很久, 你的剑气与日俱增,现在, 江湖中到处传颂你那"威风凛凛地站在风中, 身边的树叶飘飘......,一幅很酷的样子". 很多的小年青因为你, 也立誓想做一个剑客. 　　<br><br>终于有一天, 你发现自己很无聊. 在你眼中, 天下已没有什么高手了, 而自己的剑术好像也没有办法提高了. 你只是觉的闷, 奇怪天下居然还有你能做到头的事, 但是你隐约中又觉的自己还差一些. 你非常的爱护那把老剑, 你已能做到人剑一体了. 只有在一个人舞剑时, 你才能略感欣喜. 那种当初寻剑的回忆,那些练剑的回忆, 那些护剑的回忆, 在舞剑时, 一幕幕地划过脑海. 在别人看来, 你已是天下第一剑客了, 你的举手投足无不说明, 你是天下第一的. 直到有一天早上醒来, 你发现剑没了.这种事总是传的很快, 那些平日里惧怕你的对手, 又开始在江湖中兴风作浪起来了, 有几次你与他们偶遇上时, 几乎拼的要死, 才逃走. 失去了剑等于失去了你自己. 江湖上到处都在找那把你失去的剑. 又是一场无止境的血战. 你突然觉的非常的无趣, 原来练剑一辈子, 剑一丢, 等于前功尽弃. 你找个安静的山谷, 想修隐起来, 人生哪, 真是一个没有定数的人生哪. 你在那谷儿中看鱼虫跃, 鸟儿飞, 一直想找到自己失剑后会退步的这么惨的原因. 　　<br><br>有一天, 你像往常一样出游, 在谷中闲逛, 有一只蛇从后面飞速地刺向你, 你在惊觉中, 猛地转身, 用手一挥, 眼前出现的是, 蛇被劈成了两截. 你顿悟,剑术中差的那一点正是"有剑似无剑, 无剑似有剑". 原来, 那把好老剑, 正是你在习剑中不可逾越的一个障碍. 你不禁感叹: 人生哪, 真是奇妙的人生哪.<br><br><span style="FONT-WEIGHT: bold">你总算是悟到了剑道.</span><br><br>程序, 现在是我的职业, 一个差不多快被世间无数热爱或不热爱的人做烂的职业. 　　<br><br>因为喜欢程序, 所以想做一个程序员. 在还没有做程序员时, 就想像自己有一台好机子, 用着牛B的C/C++, 十指飞快地在键盘上移动, 最后一个大回车.....看到程序运行起来时, 很满足的样子. 做了程序后发现, 想有一台好机子, 想找一个好公司不容易, 刚习程序时, 编译环境最好是字符或图形化的, 在命令行上敲make, cc带一堆的参数, 真的很恐怖. 后来到了 WINDOWS下, 当然是VC,把工具栏上的按键设成自己有用的几个, 开个全屏模式, 最大化地利用屏幕,多爽. 可是机子是公共的, 有时候累了往边上一躺, 就听到同事蹑手蹑脚地在你的位置坐下, 按了几下MOUSE, 开始打FF8. 休息了一阵, 有了感觉, 想爬起来开工, 但一看到同事那幅沉醉的样子, 偶而还转过头来, 冲你一笑, 报歉地说这儿没有存盘点. 唉, 不容易, 谁叫他那台机子WINDOWS下只剩500MB的空间,而且只是6326的显卡呢. 又躺在了床上, 想着, 要是有一台机子多好, 没有一点空间是冗余的, 都只有我想要的东西装在硬盘里面, 什么时候有灵感, 什么时候就爬起来开工. 于是, 程序的几年中, 在找一台好机子. <br>终于过了几年, 有了自己的笔记本, 真爽啊, 可以随便移动, 想在哪写就在哪写.装UNIX 装LINUX装WINDOWS装上C/C++, 笔记本摆在哪儿都不一样, 摆在破桌上,也让人想到一张美国西部"破桌, 笔记本, 通辑犯的海报, 手枪", 很浓的金黄色调的宣传画. 真酷. POS摆完, 也该练点真功夫了, 要不真浪费了这么多年的追求, 又被别人数落个"金玉其表"的评价. 于是你练呀练呀, 总算有一天, 有一个你不认识的人叫了你一声"高手". 听第一遍时你还以为他在叫别人. 那天晚上你睡觉都在偷笑. 　　<br><br>然后, 你有新任务时, 的确顺手了很多. 以前要用一天写的代码, 现在只要一个早晨了, 每完成一个完整的程序, 你都更增添了一份信心. 你不知疲倦地用C/C++写和各种各样的程序, 你坚信, 只有用C/C++的程序员才是真正的程序员. 你有点蔑视VB, DEPHI, 用它们写程序, 光是启动程序都让你觉的无法忍受, 更别提那些不简练的语法了. 用C/C++的水准越来越高, 你几乎可以用它来做任何事, 加上一点硬件, 你让你家的电饭堡每天6点开煮, 电视晚上7点开播, 还有指纹锁......有一天有一个你倾慕已久的水瓶座MM去你那儿玩, 被你家的半自动化所折服, 惊叹的爱上了你. 　　<br><br>终于有一天, 你发现自己很无聊. 在你眼中, 程序没有什么新意了, 无非就是空间与时间的平衡, 而自己的程序好像也没有办法提高了. 你只是觉的闷, 奇怪天下居然还有你能做到头的事, 但是你隐约中又觉的自己还差一些. 你非常的爱护那台赛扬老机, 你已能做到人机一体了. 只有在用它写自己想玩的游戏时, 你才能略感欣喜. 那种当初学C/C++的回忆, 那些攒机的回忆, 那些护机的回忆, 在键入{}时, 一幕幕地划过脑海. 在别人看来, 你已是天下第一程序员了,你的举手投足无不说明, 你是天下第一的. 直到有一次旅游回来, 你发现屋子被撬了,没有一样东西留下.这种事总是很影响你的程序思路的, 那些平日里出现的问题, 又开始在新的任务中使你痛苦万分了, 有几次你与它们偶遇上时, 几乎想的要死, 才想出来解决之道. 你常在用程序的过程中想用一个以前写的工具时, 却发现没有了, 要重头写过. 那种累的感觉一下子冲上心头, 但是你又不想用别人写的东西, 你根本不相信别人写的东西里面没有BUG. 你觉的非常的无趣, 原来程序一辈子, 机子一丢, 等于前功尽弃. 你辞了工作, 想休息一阵, 人生哪, 真是一个没有定数的人生哪. 你路过图书馆时, 看着那些年青的大学生直直地盯着屏幕,脸上 整一幅痴迷的表情, 脑中一直想找到自己失机后, 写程序变的举步为艰的原因. 　　<br><br>有一天, 你在大学中闲逛, 你走在两个看起来像是大二的男生后面, 他们中的一个听起来水平更高一些, 因为他可以自己用C写一个俄罗斯方块, 另一个说: 哇塞, 这么利害, C语言我一直觉的很难, 像那些指针什么......", 水平更高一些的说: 我觉的你才利害, 用QUICK BASIC 那么不方便的东西都可以写出俄罗斯方块......". 你顿悟, 是呀, 你一生追求只用C/C++, 是为了什么? 程序只是用来解决实际问题的. 你不必拘泥在一种语言中而看不起别的语言, 你不必拘泥在自己的程式中而不用别人的工具呀. 原来, 语言成了你最大的障碍, 你不禁感叹: 人生哪, 真是奇妙的人生哪. 　　<br><br>你又找了份工作, 我们后来看到, 你在任何一台电脑中, 任何一种环境下, 任何一种语言, 甚至有时不用编程, 都可以解决所面对的任何问题. <br><br><span style="FONT-WEIGHT: bold">你总算是悟到了编程之道.</span> 
<img src ="http://www.cppblog.com/winmain/aggbug/80075.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/winmain/" target="_blank">Code Knight</a> 2009-04-15 22:53 <a href="http://www.cppblog.com/winmain/archive/2009/04/15/80075.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>