<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2429150657636312441</id><updated>2011-11-27T16:53:01.480-08:00</updated><category term='Python'/><category term='Tools'/><category term='Clipboard'/><category term='Win32 API'/><category term='搜索'/><category term='wxWindows'/><category term='SVN'/><category term='C/C++'/><category term='Web地址'/><category term='Unix/Linux'/><title type='text'>Erisen's Blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://erisenxu.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2429150657636312441/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://erisenxu.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Erisen's Blog</name><uri>http://www.blogger.com/profile/03450062808619754265</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>18</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2429150657636312441.post-848629311205395894</id><published>2007-04-25T01:25:00.000-07:00</published><updated>2007-04-25T01:35:09.807-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><title type='text'>一个OpenSource的RTP库</title><content type='html'>JRTPLIB 是一个用C++语言实现的RTP库，目前已经可以运行在Windows、Linux、FreeBSD、 Solaris、Unix和VxWorks等多种操作系统上。要为Linux 系统安装JRTPLIB，首先从JRTPLIB的网站（&lt;a href="http://research.edm.uhasselt.be/~jori/page/index.php?n=CS.Jrtplib" target="_black"&gt;JRTP&lt;/a&gt;）下载最新的源码包&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2429150657636312441-848629311205395894?l=erisenxu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://erisenxu.blogspot.com/feeds/848629311205395894/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2429150657636312441&amp;postID=848629311205395894' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2429150657636312441/posts/default/848629311205395894'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2429150657636312441/posts/default/848629311205395894'/><link rel='alternate' type='text/html' href='http://erisenxu.blogspot.com/2007/04/opensourcertp.html' title='一个OpenSource的RTP库'/><author><name>Erisen's Blog</name><uri>http://www.blogger.com/profile/03450062808619754265</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2429150657636312441.post-409356507383159465</id><published>2007-04-25T01:24:00.000-07:00</published><updated>2007-04-25T01:32:01.515-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web地址'/><title type='text'>一个很好的媒体资料网址</title><content type='html'>&lt;a href="http://ajsoft.pudn.com/program/program-65_250.htm" target="_black"&gt;http://ajsoft.pudn.com/program/program-65_250.htm&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2429150657636312441-409356507383159465?l=erisenxu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://erisenxu.blogspot.com/feeds/409356507383159465/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2429150657636312441&amp;postID=409356507383159465' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2429150657636312441/posts/default/409356507383159465'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2429150657636312441/posts/default/409356507383159465'/><link rel='alternate' type='text/html' href='http://erisenxu.blogspot.com/2007/04/blog-post.html' title='一个很好的媒体资料网址'/><author><name>Erisen's Blog</name><uri>http://www.blogger.com/profile/03450062808619754265</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2429150657636312441.post-4268550536236446892</id><published>2007-01-23T00:15:00.000-08:00</published><updated>2007-01-24T02:25:27.949-08:00</updated><title type='text'>程序员常用工具、软件库网址</title><content type='html'>&lt;table class="maintable"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="normal" rowspan="3"&gt;Cross-platform GUI Toolkits&lt;/td&gt;&lt;td&gt;&lt;a href="http://www.trolltech.com/products/qt/" target="_black"&gt;QT&lt;/a&gt;&lt;/td&gt;&lt;td class="normal"&gt;我认为QT是目前为止最强大的跨平台的GUI库，Linux界面GDK就是使用QT开发的，它提供Open Source的版本和商业版本，可惜用Open Source版本开发的软件必须也是Open Source的，若用来开发商业软件就要支付使用QT的费用。用途开发GUI界面非常简单，而且程序效率很高，特别在2D绘图方面，比GDI Plus强很多&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="normal"&gt;&lt;a href="http://www.wxwidgets.org/" target="_black"&gt;wxWidgets&lt;/a&gt;&lt;/td&gt;&lt;td class="normal"&gt;wxWidgets是另一个跨平台的库，是完全免费的，可以用来开发商业软件，而且它是native的，在windows下它封装了windows API，在Linux下封装了GTK+，所以其开发的软件编译后要比使用QT时小很多。学习wxWidgets也不是很难，但它还是不如QT简单，而且不如QT强大，为了对不同的平台的API的封装都提供相同的封装函数，很多平台特有的功能它没有封装进去，所以过于简单，需要特有的API时不得不使用native的API&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="normal"&gt;&lt;a href="http://www.gtk.org/" target="_black"&gt;GTK+&lt;/a&gt;&lt;/td&gt;&lt;td class="normal"&gt;GTK+是因为QT版本的限制而发展起来的，linux的GNOME界面就是使用GTK+开发的，目前在windows下也可以使用，并且可在VC下编译，只是GTK+在windows下的界面不是很好看，不如在linux下的GNOME界面那样惊艳。而且GTK+学习起来不容易，不如QT简单，对中文的支持也是很头疼的事情。不过GTK+和wxWidgets一样是完全免费的，并且可以用来开发商业软件&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="normal1" rowspan="3"&gt;IDE&lt;/td&gt;&lt;td class="normal1"&gt;&lt;a href="http://www.codeblocks.org/" target="_black"&gt;CodeBlocks&lt;/a&gt;&lt;/td&gt;&lt;td class="normal1"&gt;CodeBlocks是使用wxWidgets开发的一个IDE，可以用来开发C、C++程序，支持QT、wxWidgets、Win32等开发，支持GCC、VC、Borland C++等编译器&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="normal1"&gt;&lt;a href="http://wxdsgn.sourceforge.net/" target="_black"&gt;wxDevcpp&lt;/a&gt;&lt;/td&gt;&lt;td class="normal1"&gt;在Devcpp的基础上开发的一个IDE，支持wxWidgets的开发，还提供可视化界面用来编辑对话框&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="normal1"&gt;&lt;a href="http://www.eclipse.org/"&gt;Eclipse&lt;/a&gt;&lt;/td&gt;&lt;td class="normal1"&gt;开发Java应用最流行的工具，安装插件后也可以用来开发C、C++程序&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="normal" rowspan="6"&gt;2D/3D Library&lt;/td&gt;&lt;td class="normal"&gt;&lt;a href="http://cairographics.org/" target="_black"&gt;Cairo&lt;/a&gt;&lt;/td&gt;&lt;td class="normal"&gt;跨平台的2D图形库，类似于GDI Plus。对字体的渲染需要解决对中文的支持，目前我还没有找到合适的方法来解决中文的问题&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="normal"&gt;&lt;a href="http://glfw.sourceforge.net/" target="_black"&gt;GLFW&lt;/a&gt;&lt;/td&gt;&lt;td class="normal"&gt;免费的OpenGL图形开发包，支持多种C++编译器&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="normal"&gt;&lt;a href="http://irrlicht.sourceforge.net/" target="_black"&gt;Irrlicht&lt;/a&gt;&lt;/td&gt;&lt;td class="normal"&gt;Irrlicht引擎是一个用C++书写的高性能实时的3D引擎，可以应用于C++程序或者.NET语言中。通过使用Direct3D（Windows平台），OpenGL 1.2或它自己的软件着色程序，可以实现该引擎的完全跨平台。尽管是开源的，该Irrlicht库提供了可以在商业级的3D引擎上具有的艺术特性，例如动态的阴影，粒子系统，角色动画，室内和室外技术以及碰撞检测等&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="normal"&gt;&lt;a href="http://www.ogre3d.org/" target="_black"&gt;OGRE&lt;/a&gt;&lt;/td&gt;&lt;td class="normal"&gt;OGRE是一款开放原代码的图象渲染引擎（实际上是一款面向对象的图象渲染引擎），它是由一个小而强的团体编写并维护，由许多团体共同开发的。OGRE不是一款游戏引擎，它只是一款图象引擎，但很容易和其他库结合来建立一款游戏引擎。你需要建立游戏引擎的库有：声音、网络、输入、冲突检测，OGRG并不包含这些库，但它留有接口用于你在你的应用程序中将其他库连接到OGRE&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="normal"&gt;&lt;a href="http://www.libsdl.org/" target="_black"&gt;SDL&lt;/a&gt;&lt;/td&gt;&lt;td class="normal"&gt;SDL是一个跨平台的多媒体函数库，被用来设计成在低层访问音频，键盘，鼠标，游戏杆，基于OPENGL（一个3D图象开发函数库）的3D 硬件，和2D图象帧缓冲区。它被广泛的用于基于MPEG的媒体播放软件，模拟器，和许多著名的游戏。最著名的游戏是赢得LIUNX组游戏开发大奖的文明：权利的召唤（Civilization: Call To Power）。SDL在GNU LGPL 2（一个国际上的开源组织）下发布，这个版本允许你将SDL免费地用于商业软件的开发。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="normal"&gt;&lt;a href="http://www.opengl.org/" target="_black"&gt;OpenGL&lt;/a&gt;&lt;/td&gt;&lt;td class="normal"&gt;OpenGL是用于开发简捷的交互式二维和三维图形应用程序的最佳环境，任何高性能的图形应用程序，从3D动画、CAD辅助设计到可视化访真，都可以利用OpenGL高质量、高性能的特点。OpenGL非常接近硬件，是一个图形与硬件的接口，包括了100多个图形函数用来建立三维模型和进行三维实时交互。OpenGL强有力的图形函数不要求开发人员把三维物体模型的数据写成固定的数据格式，也不要求开发人员编写矩阵变换、外部设备访问等函数，大大地简化了编写三维图形的程序&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2429150657636312441-4268550536236446892?l=erisenxu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://erisenxu.blogspot.com/feeds/4268550536236446892/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2429150657636312441&amp;postID=4268550536236446892' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2429150657636312441/posts/default/4268550536236446892'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2429150657636312441/posts/default/4268550536236446892'/><link rel='alternate' type='text/html' href='http://erisenxu.blogspot.com/2007/01/blog-post.html' title='程序员常用工具、软件库网址'/><author><name>Erisen's Blog</name><uri>http://www.blogger.com/profile/03450062808619754265</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2429150657636312441.post-1347188141003567841</id><published>2007-01-20T07:57:00.000-08:00</published><updated>2007-01-20T08:02:23.159-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><title type='text'>IE Add-On for Firefox</title><content type='html'>I found a firefox add-on which can let firefox to use IE inside and this is very useful since so many web pages are designed by using Microsoft private html or script, and can't display correctly in firefox. You can download the add-on from &lt;a href="https://addons.mozilla.org/firefox/1419/"&gt;https://addons.mozilla.org/firefox/1419/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2429150657636312441-1347188141003567841?l=erisenxu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://erisenxu.blogspot.com/feeds/1347188141003567841/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2429150657636312441&amp;postID=1347188141003567841' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2429150657636312441/posts/default/1347188141003567841'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2429150657636312441/posts/default/1347188141003567841'/><link rel='alternate' type='text/html' href='http://erisenxu.blogspot.com/2007/01/ie-add-on-for-firefox.html' title='IE Add-On for Firefox'/><author><name>Erisen's Blog</name><uri>http://www.blogger.com/profile/03450062808619754265</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2429150657636312441.post-8899823452063004089</id><published>2007-01-20T07:37:00.000-08:00</published><updated>2007-01-20T07:39:09.258-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unix/Linux'/><title type='text'>常用vi编辑器命令</title><content type='html'>命令状态：&lt;br /&gt;j,k,h,l:上下左右&lt;br /&gt;0： 行首&lt;br /&gt;$: 行尾&lt;br /&gt;i,I :插入命令，i 在当前光标处插入 I 行首插入&lt;br /&gt;a,A:追加命令，a 在当前光标后追加，A 在行末追加&lt;br /&gt;o,O:打开命令，o 在当前行下打开一行，O在当前行上插入一行&lt;br /&gt;r,R :替换命令，r 替换当前光标处字符，R从光标处开始替换&lt;br /&gt;数字s: 替换指定数量字符&lt;br /&gt;x: 删除光标处字符&lt;br /&gt;dd: 删除当前行&lt;br /&gt;d0: 删除光标前半行&lt;br /&gt;d$: 删除光标后半行&lt;br /&gt;ctrl+f :后翻页&lt;br /&gt;ctrl+b:前翻页&lt;br /&gt;G : 文件尾&lt;br /&gt;数字G: 数字所指定行&lt;br /&gt;/string 查找字符串&lt;br /&gt;n 继续查找&lt;br /&gt;N 反向继续查找&lt;br /&gt;% 查找对应括号&lt;br /&gt;u 取消上次操作&lt;br /&gt;ex命令状态 &lt;br /&gt;：set number 显示行号&lt;br /&gt;：set smd 显示显示状态&lt;br /&gt;：0 文件首&lt;br /&gt;：1,5 copy 7 块拷贝&lt;br /&gt;：1，5 del 块删除&lt;br /&gt;：1，5 move 7 块移动&lt;br /&gt;：1，$s/string1/string2/g 全文件查找string1并替换为string2&lt;br /&gt;：wq! 存盘退出&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2429150657636312441-8899823452063004089?l=erisenxu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://erisenxu.blogspot.com/feeds/8899823452063004089/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2429150657636312441&amp;postID=8899823452063004089' title='1 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2429150657636312441/posts/default/8899823452063004089'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2429150657636312441/posts/default/8899823452063004089'/><link rel='alternate' type='text/html' href='http://erisenxu.blogspot.com/2007/01/vi.html' title='常用vi编辑器命令'/><author><name>Erisen's Blog</name><uri>http://www.blogger.com/profile/03450062808619754265</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2429150657636312441.post-8153831062575568031</id><published>2007-01-20T07:24:00.000-08:00</published><updated>2007-01-20T07:37:12.446-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unix/Linux'/><title type='text'>Unix常用命令</title><content type='html'>&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;du 查看目录所占磁碟容量&lt;/b&gt;&lt;br /&gt;命令格式: du [-sk] directory&lt;br /&gt;例子 :&lt;br /&gt;du dir1 显示目录 dir1 的总容量及其次目录的容量&lt;br /&gt;du -sk dir1 显示目录 dir1 的总容量,以k bytes为计量&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;find 文件查找&lt;/b&gt;&lt;br /&gt;命令格式: find dir -name filename command&lt;br /&gt;例子:&lt;br /&gt;find . -name hello -print 寻找目前目录及所有的子目录内叫hello的文档.&lt;br /&gt;find . -ctime +7 -print 找出七天内未被更动的文档&lt;br /&gt;find . -size +2000m -print 找出大小超过2000 bytes的文档&lt;br /&gt;find /tmp -user b1234567 -print 在/tmp下属於b1234567的文档&lt;br /&gt;find . -name '*.c' -exec rm {} 删除所有的.c档&lt;br /&gt;find . -name test\* -print 显示当前目录及其子目录文件名前4位为test的文件名&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;ln 文档连结&lt;/b&gt;&lt;br /&gt;命令格式：ln -s oldname newname ( Hard link )&lt;br /&gt;同一文档，可拥有一个以上之名称，可将文档做数个连结.&lt;br /&gt;例子 ：&lt;br /&gt;ln -s file1 file2 　　将名称 file2，连结至文档 file1.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;grep 搜索字符串&lt;/b&gt;&lt;br /&gt;命令格式:&lt;br /&gt;grep string filename&lt;br /&gt;寻找字串的方法很多，比如说我想找所有以M开头的行.此时必须引进pattern的观念.以下是一些简单的□例，以及说明：&lt;br /&gt;^M 以M开头的行，^表示开始的意思&lt;br /&gt;M$ 以M结尾的行，$表示结束的意思&lt;br /&gt;^[0-9] 以数字开始的行，[]内可列举字母&lt;br /&gt;^[124ab] 以1,2,4,a,或b开头的行&lt;br /&gt;^b.503 句点表示任一字母&lt;br /&gt;* 星号表示0个以上的字母(可以没有)&lt;br /&gt;+ 加号表示1个以上的字母&lt;br /&gt;\. 斜线可以去掉特殊意义&lt;br /&gt;&lt;eg&gt; cat passwd | grep ^b 列出大学部有申请帐号者名单&lt;br /&gt;cat passwd | grep ^s 列出交换学生申请帐号者名单&lt;br /&gt;cat passwd | grep '^b.503' 列出电机系各年级...&lt;br /&gt;grep '^\.' myfile.txt 列出所有以句点开头的行&lt;br /&gt;&lt;/eg&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;fgrep 搜索字符串&lt;/b&gt;&lt;br /&gt;命令格式：fgrep string file&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;file 显示文件类型&lt;/b&gt;&lt;br /&gt;命令格式：file fileall&lt;br /&gt;文件类型为shell script,ELF 32bit,ASCII text,data or tar file&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;diff 比较文档或目录之不同内容&lt;/b&gt;&lt;br /&gt;命令格式：diff [-r] name1 name2 ( name1 name2 可同时为档名，或目录名称.)&lt;br /&gt;例子 :&lt;br /&gt;%diff file1 file2&lt;br /&gt;比较文档 file1 与 file2 内，各行之不同处.&lt;br /&gt;%diff -r dir1 dir2&lt;br /&gt;比较目录 dir1 与 dir2 内，各文档之不同处.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;cmp 比较文档相同部分&lt;/b&gt;&lt;br /&gt;命令格式：cmp file1 file2&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2429150657636312441-8153831062575568031?l=erisenxu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://erisenxu.blogspot.com/feeds/8153831062575568031/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2429150657636312441&amp;postID=8153831062575568031' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2429150657636312441/posts/default/8153831062575568031'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2429150657636312441/posts/default/8153831062575568031'/><link rel='alternate' type='text/html' href='http://erisenxu.blogspot.com/2007/01/unix.html' title='Unix常用命令'/><author><name>Erisen's Blog</name><uri>http://www.blogger.com/profile/03450062808619754265</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2429150657636312441.post-4086346595257961259</id><published>2007-01-17T23:03:00.000-08:00</published><updated>2007-01-17T23:41:41.145-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Win32 API'/><category scheme='http://www.blogger.com/atom/ns#' term='Clipboard'/><title type='text'>Paste custom data from clipboard</title><content type='html'>Follow the below steps can read a new clipboard format data from clipboard to your application:&lt;ol&gt;&lt;li&gt;Use &lt;b&gt;RegisterClipboardFormat&lt;/b&gt; function to register a new clipboard format&lt;/li&gt;&lt;li&gt;Use &lt;b&gt;IsClipboardFormatAvailable&lt;/b&gt; function to determines whether the clipboard contains data in the specified format or not&lt;/li&gt;&lt;li&gt;Use &lt;b&gt;OpenClipboard&lt;/b&gt; to open the clipboard &lt;/li&gt;&lt;li&gt;Use &lt;b&gt;GetClipboardData&lt;/b&gt; to retrieves data from the clipboard&lt;/li&gt;&lt;li&gt;Use &lt;b&gt;GlobalSize&lt;/b&gt; to retrieves the current size, in bytes, of the data&lt;/li&gt;&lt;li&gt;Use &lt;b&gt;GlobalLock&lt;/b&gt; function to get a pointer to the first byte of the object's memory block, and then use memcpy to copy data from this pointer&lt;/li&gt;&lt;li&gt;Use &lt;b&gt;GlobalUnlock&lt;/b&gt; function to decrement the lock count associated with a memory object&lt;/li&gt;&lt;li&gt;Use &lt;b&gt;CloseClipboard&lt;/b&gt; function to close the clipboard&lt;/li&gt;&lt;/ol&gt;Below is an example&lt;br /&gt;&lt;span class="script"&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;    char* cData = NULL;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    // Register a new clipboard format named "cf/new-cf-name"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;    UINT cfType = RegisterClipboardFormat("cf/new-cf-name");&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;    if (!cfType &amp;&amp;amp; IsClipboardFormatAvailable(cfType)) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    // Open Clipboard&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;    if (OpenClipboard() )&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;    {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Get data from clipboard&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HANDLE hData = GetClipboardData(cfType);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (hData)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DWORD size = GlobalSize(hData);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cData = new char[size];&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;char* sData = (char*)GlobalLock(hData);&lt;/span&gt;&lt;br /&gt;            &lt;br /&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (sData) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;memcpy(cData, sData, size);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GlobalUnlock(hData);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CloseClipboard();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;    }&lt;/span&gt;&lt;br /&gt;    &lt;br /&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;    if (cData) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Handle the data...&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2429150657636312441-4086346595257961259?l=erisenxu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://erisenxu.blogspot.com/feeds/4086346595257961259/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2429150657636312441&amp;postID=4086346595257961259' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2429150657636312441/posts/default/4086346595257961259'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2429150657636312441/posts/default/4086346595257961259'/><link rel='alternate' type='text/html' href='http://erisenxu.blogspot.com/2007/01/paste-custom-data-from-clipboard.html' title='Paste custom data from clipboard'/><author><name>Erisen's Blog</name><uri>http://www.blogger.com/profile/03450062808619754265</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2429150657636312441.post-2242070601285075339</id><published>2007-01-17T22:23:00.000-08:00</published><updated>2007-01-17T23:00:39.623-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Win32 API'/><category scheme='http://www.blogger.com/atom/ns#' term='Clipboard'/><title type='text'>Copy custom data to clipboard</title><content type='html'>Follow the below steps can copy a new clipboard format data to clipboard&lt;ol&gt;&lt;li&gt;Use &lt;b&gt;RegisterClipboardFormat&lt;/b&gt; function to register a new clipboard format&lt;/li&gt;&lt;li&gt;Use &lt;b&gt;GlobalAlloc&lt;/b&gt; function to allocate the specified number of bytes from the heap&lt;/li&gt;&lt;li&gt;Use &lt;b&gt;GlobalLock&lt;/b&gt; function to get a pointer to the first byte of the object's memory block, and then use memcpy to copy data to this pointer&lt;/li&gt;&lt;li&gt;Use &lt;b&gt;GlobalUnlock&lt;/b&gt; to decrement the lock count associated with a memory object&lt;/li&gt;&lt;li&gt;Use &lt;b&gt;OpenClipboard&lt;/b&gt; to open the clipboard &lt;/li&gt;&lt;li&gt;Use &lt;b&gt;EmptyClipboard&lt;/b&gt; to empty the clipboard as need&lt;/li&gt;&lt;li&gt;Use &lt;b&gt;SetClipboardData&lt;/b&gt; to copy data to the clipboard&lt;/li&gt;&lt;li&gt;Use &lt;b&gt;CloseClipboard&lt;/b&gt; to close the clipboard&lt;/li&gt;&lt;/ol&gt;Below is an example&lt;br /&gt;&lt;span class="script"&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;    // Custom data&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    unsigned char cData[] = {0x01, 0x02, 0x32, 0x45};&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    int dLen = sizeof(cData)/sizeof(unsigned char);&lt;/span&gt;&lt;br /&gt;    &lt;br /&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;    // Register a new clipboard format named "cf/new-cf-name"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    UINT cfType = RegisterClipboardFormat("cf/new-cf-name");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    if (!cfType) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AfxMessageBox("Register clipboard format error");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    }&lt;/span&gt;&lt;br /&gt;    &lt;br /&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;    // Alloc&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    HGLOBAL hGlobalData = GlobalAlloc(GMEM_DDESHARE, dLen); &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    if (!hGlobalData) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    { &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    }&lt;/span&gt;&lt;br /&gt;    &lt;br /&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;    // Lock the handle and copy the custom data to the buffer. &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    char* sData = (char*)GlobalLock(hGlobalData); &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    memcpy(sData, cData, dLen); &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    GlobalUnlock(hGlobalData);   &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;    // Open Clipboard&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    if (OpenClipboard())&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Remove the current Clipboard contents&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (EmptyClipboard())&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (!::SetClipboardData(cfType, hGlobalData)) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AfxMessageBox("Unable to set Clipboard data");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CloseClipboard();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2429150657636312441-2242070601285075339?l=erisenxu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://erisenxu.blogspot.com/feeds/2242070601285075339/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2429150657636312441&amp;postID=2242070601285075339' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2429150657636312441/posts/default/2242070601285075339'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2429150657636312441/posts/default/2242070601285075339'/><link rel='alternate' type='text/html' href='http://erisenxu.blogspot.com/2007/01/copy-custom-data-to-clipboard.html' title='Copy custom data to clipboard'/><author><name>Erisen's Blog</name><uri>http://www.blogger.com/profile/03450062808619754265</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2429150657636312441.post-4694473787858783549</id><published>2007-01-17T19:07:00.000-08:00</published><updated>2007-01-17T19:53:45.841-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Win32 API'/><category scheme='http://www.blogger.com/atom/ns#' term='Clipboard'/><title type='text'>Copy Enhance Metafile to Clipboard</title><content type='html'>&lt;font class="script"&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;    // Below is an example to copy a enhance metafile to clipboard by using win32 API&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    RECT rc;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;    // Calculate the metafile width and height&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;    // Convert from pixel dimensions to MM dimensions since&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;    // metafile use MM dimensions(in .01-millimeter units)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    HDC hDC = ::GetDC(hWnd);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    int iWidthMM    = GetDeviceCaps(hDC, HORZSIZE);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    int iHeightMM   = GetDeviceCaps(hDC, VERTSIZE);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    int iWidthPels  = GetDeviceCaps(hDC, HORZRES);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    int iHeightPels = GetDeviceCaps(hDC, VERTRES);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    ::ReleaseDC(hWnd, hDC);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    int iMMPerPelX  = (iWidthMM * 100)/iWidthPels;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    int iMMPerPelY  = (iHeightMM * 100)/iHeightPels;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    rc.left   = 0 * iMMPerPelX;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    rc.top  = 0 * iMMPerPelY;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    rc.right  = 100 * iMMPerPelX;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    rc.bottom = 100 * iMMPerPelY;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;    // Create the metafile and draw a rectangle&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    HDC hMetaDC = CreateEnhMetaFile((HDC)NULL, NULL, &amp;rc, "ddd");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    Rectangle(hMetaDC, 0, 0, 100, 100);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    HENHMETAFILE hMetaFile = CloseEnhMetaFile(hMetaDC);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;    // Open Clipboard&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    if (OpenClipboard())&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Remove the current Clipboard contents&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (EmptyClipboard())&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (!::SetClipboardData(CF_ENHMETAFILE, hMetaFile))&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AfxMessageBox("Unable to set Clipboard data");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AfxMessageBox("Copy Data to clipboard Error: Cannot empty the Clipboard");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CloseClipboard();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    } else {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AfxMessageBox("Copy Data to clipboard Error: Cannot open the Clipboard");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    DeleteEnhMetaFile(hMetaFile);&lt;/span&gt;&lt;br /&gt;&lt;/font&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2429150657636312441-4694473787858783549?l=erisenxu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://erisenxu.blogspot.com/feeds/4694473787858783549/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2429150657636312441&amp;postID=4694473787858783549' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2429150657636312441/posts/default/4694473787858783549'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2429150657636312441/posts/default/4694473787858783549'/><link rel='alternate' type='text/html' href='http://erisenxu.blogspot.com/2007/01/copy-enhance-metafile-to-clipboard.html' title='Copy Enhance Metafile to Clipboard'/><author><name>Erisen's Blog</name><uri>http://www.blogger.com/profile/03450062808619754265</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2429150657636312441.post-1379860182068999827</id><published>2006-12-30T23:29:00.000-08:00</published><updated>2006-12-30T23:51:00.681-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Win32 API'/><title type='text'>给对话框中的CTreeCtrl控件添加右键菜单</title><content type='html'>给对话框中的CTreeCtrl控件添加右键菜单，有几种方法，一种是从CTreeCtrl派生一个类，在这个类的WM_RBUTTONDOWN中弹出右键菜单，但这样做会增加类。另一个方法就是在对话框的WM_CONTEXTMENU消息中，弹出右键菜单：&lt;br /&gt;&lt;font class="script"&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;void TreeTestDlg::OnContextMenu(CWnd* pWnd, CPoint point)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (pWnd == &amp;m_treeCtrl) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UINT flags;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m_treeCtrl.ScreenToClient(&amp;point);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HTREEITEM hItem = m_treeCtrl.HitTest(point, &amp;flags);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (hItem) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m_treeCtrl.SelectItem(hItem);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;showTreePopMenu(point, hItem);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;}&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;其中，showTreePopMenu，用来弹出右键菜单：&lt;br /&gt;&lt;font class="script"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;void TreeTestDlg::showTreePopMenu(CPoint&amp; point, HTREEITEM hItem)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CMenu menu;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CMenu* pMenu = NULL;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;menu.LoadMenu(IDR_TREE_MENU);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pMenu = menu.GetSubMenu(0); &lt;span style="color: rgb(0, 128, 0);"&gt;// 0表示取第一个子菜单&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (!pMenu) return;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GetCursorPos(&amp;point);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pMenu-&gt;TrackPopupMenu(TPM_LEFTALIGN, point.x, point.y, this);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/font&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2429150657636312441-1379860182068999827?l=erisenxu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://erisenxu.blogspot.com/feeds/1379860182068999827/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2429150657636312441&amp;postID=1379860182068999827' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2429150657636312441/posts/default/1379860182068999827'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2429150657636312441/posts/default/1379860182068999827'/><link rel='alternate' type='text/html' href='http://erisenxu.blogspot.com/2006/12/ctreectrl.html' title='给对话框中的CTreeCtrl控件添加右键菜单'/><author><name>Erisen's Blog</name><uri>http://www.blogger.com/profile/03450062808619754265</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2429150657636312441.post-6834921169694342516</id><published>2006-12-30T21:27:00.000-08:00</published><updated>2006-12-30T21:28:33.773-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='搜索'/><title type='text'>如何让搜索引擎收录我的站点</title><content type='html'>方法一：主动向搜索引擎提交自己的网址&lt;br /&gt;向百度、Google、Yahoo提交网址是不用花钱的，其提交页面分别为：&lt;br /&gt;&lt;a href="http://www.baidu.com/search/url_submit.html"&gt;http://www.baidu.com/search/url_submit.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.google.com/intl/zh-CN/add_url.html"&gt;http://www.google.com/intl/zh-CN/add_url.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.yisou.com/search_submit.html?source=yisou_www_hp"&gt;http://www.yisou.com/search_submit.html?source=yisou_www_hp&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;方法二：和同类且已被收录的网站做链接&lt;br /&gt;这 个很简单了，如果你的网站刚刚建成，而朋友的网站已经被几个搜索引擎收录了，那么就和他交换一下 首页链接，这样，下次搜索引擎抓取他网站上的内容的时候就会“顺便”发现你的网站（起到跳板的作用），并予以收录。需要注意的是，这种友情链接应以文本链 接和logo的形式存在，而不要采用图片热点或flash的形式。另外就是回避那种通过CGI程序管理友情链接的网站，这种网站通常把链接存在数据库中， 随意排序、变换位置，导致搜索引擎无法正常的找到你的网址。&lt;br /&gt;&lt;br /&gt;方法三：合理、合法的对网站进行SEO（搜索引擎优化）&lt;br /&gt;关于网站优化方面的文章网上很多，不过很可惜，良莠不齐，新旧不分，同时因为SEO是一项经验、技术并重的业务，所以别人也很难或不愿意把自己掌握的东西告诉你，因此，只能靠自己分辨识别了。关于这部分，请查看页面地址 &lt;a href="http://www.dfm369.com/20050925/20050512001.html" target="_parent"&gt;http://www.dfm369.com/20050925/20050512001.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2429150657636312441-6834921169694342516?l=erisenxu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://erisenxu.blogspot.com/feeds/6834921169694342516/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2429150657636312441&amp;postID=6834921169694342516' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2429150657636312441/posts/default/6834921169694342516'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2429150657636312441/posts/default/6834921169694342516'/><link rel='alternate' type='text/html' href='http://erisenxu.blogspot.com/2006/12/blog-post.html' title='如何让搜索引擎收录我的站点'/><author><name>Erisen's Blog</name><uri>http://www.blogger.com/profile/03450062808619754265</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2429150657636312441.post-213323668088035821</id><published>2006-12-30T07:04:00.000-08:00</published><updated>2006-12-30T07:12:35.908-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Win32 API'/><title type='text'>纯资源DLL的编写</title><content type='html'>纯资源的DLL就是只包含资源的DLL，例如：图标，位图，字符串，声音，视频，对话框等。使用纯资源DLL可以节约可执行文件的大小，可以被所有的应用程序所共享，从而提高系统性能。纯资源DLL的编写比普通的DLL要简单的多：&lt;br /&gt;1) 创建一个WIN32 DLL工程，不是MFC的DLL&lt;br /&gt;2) 创建一个资源文件 *.RC，添加到资源DLL的工程中去&lt;br /&gt;3) 添加一个初始化DLL的原文件:&lt;br /&gt;&lt;font class="script"&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;#include "windows.h"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;extern "C" BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;    return 1;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;}&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;这是纯资源DLL所必须需的代码，保存这个文件为*.CPP。编译这个资源DLL。&lt;br /&gt;&lt;br /&gt;在应用程序显示的调用这个DLL，使用LoadLibrary函数装入资源DLL，FindResource和LoadResource来装入各种资源，或者使用下列的特定的资源装入函数：&lt;br /&gt;FormatMessage&lt;br /&gt;LoadAccelerators&lt;br /&gt;LoadBitmap&lt;br /&gt;LoadCursor&lt;br /&gt;LoadIcon&lt;br /&gt;LoadMenu&lt;br /&gt;LoadString&lt;br /&gt;当资源使用结束，应用程序须调用FreeLibrary函数来释放资源。&lt;br /&gt;&lt;br /&gt;&lt;span class="b1"&gt;调用编写好的资源DLL的步骤如下：&lt;/span&gt;&lt;br /&gt;首先在应用程序中声明一个DLL的句柄，HINSTANCE m_hLibrary;在OnCreate( )&lt;br /&gt;函数中调用LoadLirbrary( ),在OnDestory( )中调用FreeLibrary（）。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2429150657636312441-213323668088035821?l=erisenxu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://erisenxu.blogspot.com/feeds/213323668088035821/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2429150657636312441&amp;postID=213323668088035821' title='1 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2429150657636312441/posts/default/213323668088035821'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2429150657636312441/posts/default/213323668088035821'/><link rel='alternate' type='text/html' href='http://erisenxu.blogspot.com/2006/12/dll.html' title='纯资源DLL的编写'/><author><name>Erisen's Blog</name><uri>http://www.blogger.com/profile/03450062808619754265</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2429150657636312441.post-7580752362930451687</id><published>2006-12-28T21:15:00.001-08:00</published><updated>2006-12-28T23:00:26.689-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><title type='text'>使用c/c++判断文件是否存在</title><content type='html'>&lt;font class="script"&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;// Test whether a file is exist or not&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;bool fileExists(const char* fileName)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;{&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (!fileName) return false;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;#ifdef WIN32&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;struct _stat buf;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int result;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;result = _stat(fileName, &amp;buf);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (result) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return false;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return (buf.st_mode &amp; _S_IFMT) == _S_IFREG;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;#else&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;struct stat buf;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int result;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;result = stat(fileName, &amp;buf);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (result) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return false;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return (buf.st_mode &amp; S_IFMT) == S_IFREG;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;#endif&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/font&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2429150657636312441-7580752362930451687?l=erisenxu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://erisenxu.blogspot.com/feeds/7580752362930451687/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2429150657636312441&amp;postID=7580752362930451687' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2429150657636312441/posts/default/7580752362930451687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2429150657636312441/posts/default/7580752362930451687'/><link rel='alternate' type='text/html' href='http://erisenxu.blogspot.com/2006/12/win32-api-shfileoperation_28.html' title='使用c/c++判断文件是否存在'/><author><name>Erisen's Blog</name><uri>http://www.blogger.com/profile/03450062808619754265</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2429150657636312441.post-3920647790438450889</id><published>2006-12-28T21:15:00.000-08:00</published><updated>2006-12-28T22:54:11.179-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Win32 API'/><title type='text'>Win32 API SHFileOperation</title><content type='html'>The win32 API SHFileOperation can be used to delete a whole directory or copy a directory from a path to another, below is an example:&lt;br /&gt;&lt;br /&gt;&lt;font class="script"&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;// Delete the whole directory&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;BOOL DelDir(LPCTSTR lpszPath)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;char fPath[MAX_PATH];&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;memset(fPath, 0, sizeof(fPath));&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;strcpy(fPath, lpszPath);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Note : 目录不能以\或/结尾&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for (int i = strlen(fPath) - 1; i &gt;= 0; i--) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (fPath[i] == '\\' || fPath[i] == '/') {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fPath[i] = 0;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;break;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SHFILEOPSTRUCT FileOp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FileOp.fFlags = FOF_NOCONFIRMATION;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FileOp.hNameMappings = NULL;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FileOp.hwnd = NULL;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FileOp.lpszProgressTitle = NULL;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FileOp.pFrom = fPath;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FileOp.pTo = NULL;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FileOp.wFunc = FO_DELETE;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return SHFileOperation(&amp;FileOp) == 0;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;// Copy Directory or file, 注意字符串fromPath与toPath必须以"\0\0"结尾，&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;// 且目录的文件分割符是'\'，不是'/'&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;BOOL copy(LPCTSTR fromPath, LPCTSTR toPath)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SHFILEOPSTRUCT FileOp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FileOp.fFlags = FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FileOp.hNameMappings = NULL;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FileOp.hwnd = NULL;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FileOp.lpszProgressTitle = NULL;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FileOp.pFrom = fromPath;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FileOp.pTo = toPath;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FileOp.wFunc = FO_COPY;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return SHFileOperation(&amp;FileOp) == 0;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/font&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2429150657636312441-3920647790438450889?l=erisenxu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://erisenxu.blogspot.com/feeds/3920647790438450889/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2429150657636312441&amp;postID=3920647790438450889' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2429150657636312441/posts/default/3920647790438450889'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2429150657636312441/posts/default/3920647790438450889'/><link rel='alternate' type='text/html' href='http://erisenxu.blogspot.com/2006/12/win32-api-shfileoperation.html' title='Win32 API SHFileOperation'/><author><name>Erisen's Blog</name><uri>http://www.blogger.com/profile/03450062808619754265</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2429150657636312441.post-4965957425972072991</id><published>2006-12-25T04:03:00.000-08:00</published><updated>2006-12-28T22:58:18.255-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wxWindows'/><title type='text'>Use Blit in wxWindows</title><content type='html'>wxDC::Blit is used to copy from a source DC to this DC, and it can be used to erase a shape but no affect the backgroud. This is very useful in case you need to erase a shape but not want to invoke Refresh or Invalidate since such methods may bring flickering. Below is an example:&lt;br /&gt;&lt;font class="script"&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;wxMemoryDC memDC;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;// Draw an ellipse as background&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;dc.SetBrush(wxBrush(wxColour(255, 0, 0)));&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;dc.DrawEllipse(10, 10, 100, 100);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;// Draw a line&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;wxBitmap bmp(150, 1);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;memDC.SelectObject(bmp);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;dc.Blit(5, 60, 150, 1, &amp;memDC, 0, 0, wxEQUIV);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;// Erase the line&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;dc.Blit(5, 60, 150, 1, &amp;memDC, 0, 0, wxINVERT);&lt;/span&gt;&lt;br /&gt;&lt;/font&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2429150657636312441-4965957425972072991?l=erisenxu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://erisenxu.blogspot.com/feeds/4965957425972072991/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2429150657636312441&amp;postID=4965957425972072991' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2429150657636312441/posts/default/4965957425972072991'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2429150657636312441/posts/default/4965957425972072991'/><link rel='alternate' type='text/html' href='http://erisenxu.blogspot.com/2006/12/use-blit-in-wxwindows.html' title='Use Blit in wxWindows'/><author><name>Erisen's Blog</name><uri>http://www.blogger.com/profile/03450062808619754265</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2429150657636312441.post-7168406986941146820</id><published>2006-12-18T22:28:00.000-08:00</published><updated>2006-12-19T00:02:39.415-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><title type='text'>Use select as "sleep"</title><content type='html'>The function "select" can be used as a "timer", and it is more accurate than "sleep". And in most program, select but not sleep is used. Below is a example:&lt;br /&gt;&lt;font class="script"&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;#include&lt;/span&gt; "sys/time.h"&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;#include&lt;/span&gt; "unistd.h"&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;#include&lt;/span&gt; "stdio.h"&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;int&lt;/span&gt; main(&lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt;)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;timeval tv;&lt;br /&gt;&amp;nbsp;&amp;nbsp;timeval tv0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;timeval tv1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(51, 51, 255);"&gt;float &lt;/span&gt;timeuse;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;tv.tv_sec = 10;&lt;br /&gt;&amp;nbsp;&amp;nbsp;tv.tv_usec = 0;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;gettimeofday(&amp;tv0, NULL);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(0, 128, 0);"&gt;// Here select is same as "sleep(10)", &lt;br /&gt;&amp;nbsp;&amp;nbsp;// but more accurate than sleep&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;select(0, NULL, NULL, NULL, &amp;tv);&lt;br /&gt;&amp;nbsp;&amp;nbsp;gettimeofday(&amp;tv1, NULL);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;timeuse = 1000000*(tv0.tv_sec - tv1.tv_sec) +&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tv0.tv_usec - tv1.tv_usec;&lt;br /&gt;&amp;nbsp;&amp;nbsp;timeuse /= 1000000;&lt;br /&gt;&amp;nbsp;&amp;nbsp;printf(&lt;span style="color: rgb(255, 0, 0);"&gt;"The time used is %f\n"&lt;/span&gt;, timeuse);&lt;br /&gt;}&lt;br /&gt;&lt;/font&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2429150657636312441-7168406986941146820?l=erisenxu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://erisenxu.blogspot.com/feeds/7168406986941146820/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2429150657636312441&amp;postID=7168406986941146820' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2429150657636312441/posts/default/7168406986941146820'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2429150657636312441/posts/default/7168406986941146820'/><link rel='alternate' type='text/html' href='http://erisenxu.blogspot.com/2006/12/use-select-as-sleep.html' title='Use select as &quot;sleep&quot;'/><author><name>Erisen's Blog</name><uri>http://www.blogger.com/profile/03450062808619754265</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2429150657636312441.post-8021968363306658018</id><published>2006-12-18T22:26:00.000-08:00</published><updated>2006-12-19T00:00:04.785-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Exectue External Command in Python</title><content type='html'>&lt;span style="color: rgb(0, 153, 0);"&gt;"""This program test how to invoke command"""&lt;/span&gt;&lt;br /&gt;&lt;font class="script"&gt;&lt;br /&gt;import os&lt;br /&gt;os.system(&lt;span style="color: rgb(255, 0, 0);"&gt;"ls -l"&lt;/span&gt;)&lt;/font&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2429150657636312441-8021968363306658018?l=erisenxu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://erisenxu.blogspot.com/feeds/8021968363306658018/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2429150657636312441&amp;postID=8021968363306658018' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2429150657636312441/posts/default/8021968363306658018'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2429150657636312441/posts/default/8021968363306658018'/><link rel='alternate' type='text/html' href='http://erisenxu.blogspot.com/2006/12/how-to-run-external-command-in-python.html' title='Exectue External Command in Python'/><author><name>Erisen's Blog</name><uri>http://www.blogger.com/profile/03450062808619754265</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2429150657636312441.post-7870953085906921153</id><published>2006-12-18T02:22:00.000-08:00</published><updated>2006-12-19T00:02:57.471-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SVN'/><title type='text'>Use SVN Client API in VC</title><content type='html'>&lt;span style="color: rgb(255, 0, 0);"&gt;1) First, download the following libs:&lt;/span&gt;&lt;div class="entry-body"&gt; &lt;p&gt;&lt;a href="http://subversion.tigris.org/downloads/svn-win32-1.4.2_dev.zip" target="_blank"&gt;svn-win32-1.4.2_dev.zip&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://subversion.tigris.org/downloads/subversion-deps-1.4.2.zip" target="_blank"&gt;subversion-deps-1.4.2.zip&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://subversion.tigris.org/files/documents/15/20739/svn-win32-libintl.zip" target="_blank"&gt;svn-win32-libintl.zip&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://subversion.tigris.org/files/documents/15/32472/db-4.4.20-win32.zip" target="_blank"&gt;db-4.4.20-win32.zip&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;2) Second, add the following libs as link lib&lt;br /&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;libsvn_client-1.lib libsvn_delta-1.lib libsvn_diff-1.lib libsvn_fs-1.lib  libsvn_fs_base-1.lib libsvn_fs_fs-1.lib libsvn_ra-1.lib libsvn_ra_dav-1.lib  libsvn_ra_local-1.lib　libsvn_ra_svn-1.lib libsvn_repos-1.lib libsvn_subr-1.lib  libsvn_wc-1.lib libapr.lib libaprutil.lib xml.lib libneon.lib intl3_svn.lib  libdb44s.lib WS2_32.Lib shfolder.lib&lt;/p&gt; &lt;p&gt;Note: the shfolder.lib is a must, or will get the following errors in link time:&lt;br /&gt;libsvn_subr-1.lib(config_win.obj) : error  LNK2001: unresolved external symbol  __imp__SHGetFolderPathA@20　　&lt;br /&gt;libsvn_subr-1.lib(config_win.obj) : error  LNK2001: unresolved external symbol  __imp__SHGetFolderPathW@20　&lt;br /&gt;Debug/mini_client.exe : fatal error LNK1120: 2  unresolved externals&lt;/p&gt;  &lt;p&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;3) Third, click the "project-&gt;setting..." menu item, and in the C/C++ tab, select "code generation" Category, and set "Use runtime library as "Debug Multithreaded Dll" or "&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Multithreaded Dll&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;"&lt;/span&gt;。or will get the following errors in link time:&lt;br /&gt;Linking...　　&lt;br /&gt;MSVCRT.lib(MSVCRT.dll) : error LNK2005: _strncmp already  defined in LIBC.lib(strncmp.obj)　　&lt;br /&gt;MSVCRT.lib(MSVCRT.dll) : error LNK2005:  _free already defined in LIBC.lib(free.obj)　　&lt;br /&gt;MSVCRT.lib(MSVCRT.dll) : error  LNK2005: _strchr already defined in  LIBC.lib(strchr.obj)　　&lt;br /&gt;MSVCRT.lib(MSVCRT.dll) : error LNK2005: _calloc  already defined in LIBC.lib(calloc.obj)　&lt;br /&gt;MSVCRT.lib(MSVCRT.dll) : error  LNK2005: _malloc already defined in  LIBC.lib(malloc.obj)　　&lt;br /&gt;MSVCRT.lib(MSVCRT.dll) : error LNK2005: __close  already defined in LIBC.lib(close.obj)　&lt;br /&gt;…...&lt;br /&gt;MSVCRT.lib(MSVCRT.dll) :  error LNK2005: __write already defined in LIBC.lib(write.obj)　&lt;br /&gt;LINK : warning  LNK4098: defaultlib "MSVCRT" conflicts with use of other libs; use  /NODEFAULTLIB:library　　&lt;br /&gt;Debug/mini_client.exe : fatal error LNK1169: one or  more multiply defined symbols found　　&lt;br /&gt;Error executing link.exe.&lt;/p&gt;  &lt;p&gt; 4) &lt;span style="color: rgb(255, 0, 0);"&gt;Finally, Download minimal_client.c&lt;/span&gt; from &lt;a href="http://svn.collab.net/repos/svn/tags/1.3.2/tools/examples/" target="_blank"&gt;http://svn.collab.net/repos/svn/tags/1.3.2/tools/examples/&lt;/a&gt;, it is a example described how to use svn client api.&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2429150657636312441-7870953085906921153?l=erisenxu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://erisenxu.blogspot.com/feeds/7870953085906921153/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2429150657636312441&amp;postID=7870953085906921153' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2429150657636312441/posts/default/7870953085906921153'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2429150657636312441/posts/default/7870953085906921153'/><link rel='alternate' type='text/html' href='http://erisenxu.blogspot.com/2006/12/vcsubversion-client-api.html' title='Use SVN Client API in VC'/><author><name>Erisen's Blog</name><uri>http://www.blogger.com/profile/03450062808619754265</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
