<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_Pipeline -- GTD faquir</title><subtitle type="text">GIS, CAD, CG C++/C/C#, Object C, Qt, MFC/ATL/COM/STLLinux, Mac, Cross platform build;Python, Perl, Shell scriptWPF,C#(2010)ASP.NET, JavaScript, jQuery, SQL, Linq (2011)(发表是最好的回忆)</subtitle><id>http://feed.cnblogs.com/blog/u/30311/rss</id><updated>2012-01-29T09:24:52Z</updated><author><name>SunWentao</name><uri>http://www.cnblogs.com/SunWentao/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/SunWentao/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/30311/rss"/><entry><id>http://www.cnblogs.com/SunWentao/archive/2012/01/29/2331309.html</id><title type="text">vi 快捷方式 手册</title><summary type="text"/><published>2012-01-29T09:25:00Z</published><updated>2012-01-29T09:25:00Z</updated><author><name>SunWentao</name><uri>http://www.cnblogs.com/SunWentao/</uri></author><link rel="alternate" href="http://www.cnblogs.com/SunWentao/archive/2012/01/29/2331309.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/SunWentao/archive/2012/01/29/2331309.html"/><content type="html">&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/26751/2012012917230156.jpg" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/26751/2012012917232282.jpg" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/26751/2012012917234698.jpg" alt="" /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/SunWentao/aggbug/2331309.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/SunWentao/archive/2012/01/29/2331309.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/SunWentao/archive/2011/12/28/2305392.html</id><title type="text">我使用的 vim _vimrc 文件</title><summary type="text">好用的 vim _vimrc 文件替换C:\Program Files\Vim 下面的 _vimrccontent:set nocompatiblesource $VIMRUNTIME/vimrc_example.vimsource $VIMRUNTIME/mswin.vimbehave mswinset backspace=indent,eol,startset rulerset showcmdset wildmenuset fo=cqrtset laststatus=2set textwidth=78set ww=&amp;lt;,&amp;gt;,h,lset autoindentset noeb vi</summary><published>2011-12-28T13:15:00Z</published><updated>2011-12-28T13:15:00Z</updated><author><name>SunWentao</name><uri>http://www.cnblogs.com/SunWentao/</uri></author><link rel="alternate" href="http://www.cnblogs.com/SunWentao/archive/2011/12/28/2305392.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/SunWentao/archive/2011/12/28/2305392.html"/><content type="html">&lt;p style="text-align: center;"&gt;&lt;strong&gt;好用的 vim _vimrc 文件&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;替换C:\Program Files\Vim 下面的 _vimrc&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;content:&lt;/p&gt;&#xD;
&lt;p&gt;set nocompatible&lt;/p&gt;&#xD;
&lt;div&gt;source $VIMRUNTIME/vimrc_example.vim&lt;/div&gt;&#xD;
&lt;div&gt;source $VIMRUNTIME/mswin.vim&lt;/div&gt;&#xD;
&lt;div&gt;behave mswin&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;set backspace=indent,eol,start&lt;/div&gt;&#xD;
&lt;div&gt;set ruler&lt;/div&gt;&#xD;
&lt;div&gt;set showcmd&lt;/div&gt;&#xD;
&lt;div&gt;set wildmenu&lt;/div&gt;&#xD;
&lt;div&gt;set fo=cqrt&lt;/div&gt;&#xD;
&lt;div&gt;set laststatus=2&lt;/div&gt;&#xD;
&lt;div&gt;set textwidth=78&lt;/div&gt;&#xD;
&lt;div&gt;set ww=&amp;lt;,&amp;gt;,h,l&lt;/div&gt;&#xD;
&lt;div&gt;set autoindent&lt;/div&gt;&#xD;
&lt;div&gt;set noeb visualbell&lt;/div&gt;&#xD;
&lt;div&gt;set expandtab&lt;/div&gt;&#xD;
&lt;div&gt;set tabstop=4&lt;/div&gt;&#xD;
&lt;div&gt;set shiftwidth=4&lt;/div&gt;&#xD;
&lt;div&gt;set expandtab&lt;/div&gt;&#xD;
&lt;div&gt;let mapleader = ","&lt;/div&gt;&#xD;
&lt;div&gt;syn on&lt;/div&gt;&#xD;
&lt;div&gt;filetype on&lt;/div&gt;&#xD;
&lt;div&gt;filetype plugin on&lt;/div&gt;&#xD;
&lt;div&gt;filetype indent on&lt;/div&gt;&#xD;
&lt;div&gt;set nobackup&lt;/div&gt;&#xD;
&lt;div&gt;set nu&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;set diffexpr=MyDiff()&lt;/div&gt;&#xD;
&lt;div&gt;function MyDiff()&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;let opt = '-a --binary '&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;if &amp;amp;diffopt =~ 'icase' | let opt = opt . '-i ' | endif&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;if &amp;amp;diffopt =~ 'iwhite' | let opt = opt . '-b ' | endif&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;let arg1 = v:fname_in&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;if arg1 =~ ' ' | let arg1 = '"' . arg1 . '"' | endif&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;let arg2 = v:fname_new&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;if arg2 =~ ' ' | let arg2 = '"' . arg2 . '"' | endif&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;let arg3 = v:fname_out&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;if arg3 =~ ' ' | let arg3 = '"' . arg3 . '"' | endif&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;let eq = ''&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;if $VIMRUNTIME =~ ' '&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if &amp;amp;sh =~ '\&amp;lt;cmd'&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;let cmd = '""' . $VIMRUNTIME . '\diff"'&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;let eq = '"'&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;else&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;let cmd = substitute($VIMRUNTIME, ' ', '" ', '') . '\diff"'&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;endif&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;else&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;let cmd = $VIMRUNTIME . '\diff'&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;endif&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;silent execute '!' . cmd . ' ' . opt . arg1 . ' ' . arg2 . ' &amp;gt; ' . arg3 . eq&lt;/div&gt;&#xD;
&lt;div&gt;endfunction&lt;/div&gt;&lt;img src="http://www.cnblogs.com/SunWentao/aggbug/2305392.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/SunWentao/archive/2011/12/28/2305392.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/SunWentao/archive/2011/12/27/2304137.html</id><title type="text">vs2010 下的vim 插件 vsvim</title><summary type="text">vs2010 下的vim 插件 vsvim推荐一个好用的vsvim插件:http://visualstudiogallery.msdn.microsoft.com/59ca71b3-a4a3-46ca-8fe1-0e90e3f79329/view/Discussions/4大大提高了vs编程时的编辑效率。但是一个问题是和visual assist x 1848 版本及之前的有冲突(不仔细用还不会察觉):visual mode 不可用。参看：http://www.wholetomato.com/forum/topic.asp?TOPIC_ID=10055建议 va version &amp;gt; 18</summary><published>2011-12-27T15:16:00Z</published><updated>2011-12-27T15:16:00Z</updated><author><name>SunWentao</name><uri>http://www.cnblogs.com/SunWentao/</uri></author><link rel="alternate" href="http://www.cnblogs.com/SunWentao/archive/2011/12/27/2304137.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/SunWentao/archive/2011/12/27/2304137.html"/><content type="html">&lt;p style="text-align: center;"&gt;&lt;strong&gt;vs2010 下的vim 插件 vsvim&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;推荐一个好用的vsvim插件:&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://visualstudiogallery.msdn.microsoft.com/59ca71b3-a4a3-46ca-8fe1-0e90e3f79329/view/Discussions/4"&gt;http://visualstudiogallery.msdn.microsoft.com/59ca71b3-a4a3-46ca-8fe1-0e90e3f79329/view/Discussions/4&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;大大提高了vs编程时的编辑效率。&lt;/p&gt;&#xD;
&lt;p&gt;但是一个问题是和visual assist x 1848 版本及之前的有冲突(不仔细用还不会察觉):&lt;/p&gt;&#xD;
&lt;p&gt;visual mode 不可用。&lt;/p&gt;&#xD;
&lt;p&gt;参看：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.wholetomato.com/forum/topic.asp?TOPIC_ID=10055"&gt;http://www.wholetomato.com/forum/topic.asp?TOPIC_ID=10055&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;建议 va version &amp;gt; 1848.&lt;/p&gt;&lt;img src="http://www.cnblogs.com/SunWentao/aggbug/2304137.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/SunWentao/archive/2011/12/27/2304137.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/SunWentao/archive/2011/10/27/2226745.html</id><title type="text">每天看一下的白领健康讲座</title><summary type="text">白领健康讲座从外服05年度雇员体检资料谈起外服雇员2005年度体检数据体检总数:38381人男性： 18756人女性： 19625人体检结果: 本次体检未见明显异常者: 8907人 也就是说，各类患病人数达到 29474人体检患病人数占前三位的病种外服近4万白领体检结果的反映目前中青年白领的健康状况令人堪忧.高血脂、脂肪肝等以往老年人容易得的心脑血管疾病都在中青年白领中提前报到，应该引起方方面面的重视。然而有调查结果显示目前白领中有近20％的人认为&amp;quot;没有时间健身或照顾自己的健康&amp;quot;。有22％的人只能&amp;quot;偶尔健身&amp;quot;，但&amp;quot;没有毅...</summary><published>2011-10-27T08:30:00Z</published><updated>2011-10-27T08:30:00Z</updated><author><name>SunWentao</name><uri>http://www.cnblogs.com/SunWentao/</uri></author><link rel="alternate" href="http://www.cnblogs.com/SunWentao/archive/2011/10/27/2226745.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/SunWentao/archive/2011/10/27/2226745.html"/><content type="html">&lt;p&gt;白领健康讲座&lt;br /&gt;从外服05年度雇员体检&lt;br /&gt;资料谈起&amp;nbsp;&lt;br /&gt;外服雇员2005年度体检数据&lt;br /&gt;体检总数:38381人&lt;br /&gt;男性： 18756人&lt;br /&gt;女性： 19625人&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;体检结果:&lt;br /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 8907人&lt;br /&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 29474人&lt;/p&gt;&#xD;
&lt;p&gt;体检患病人数占前三位的病种&amp;nbsp;&lt;br /&gt;外服近4万白领体检结果的反映&lt;br /&gt;目前中青年白领的健康状况令人堪忧.&lt;br /&gt;高血脂、脂肪肝等以往老年人容易得的心脑血管疾病都在中青年白领中提前报到，应该引起方方面面的重视。&lt;br /&gt;然而有调查结果显示&lt;br /&gt;目前白领中有近20％的人认为"没有时间健身或照顾自己的健康"。&lt;br /&gt;有22％的人只能"偶尔健身"，但"没有毅力或兴趣去坚持"。有9％的人虽然"没有时间锻炼"，但"维生素还是吃的"。&lt;br /&gt;另外还有23％的人认为自己"身体还不错"，"不考虑健身吃药"。 （即便是在那些认为自己身体还不错而无需健身的人群，也并不是22－24岁的年轻人，而是30－39年龄段的人群。虽然，这个年龄也是人生中最需要注意保养和锻炼的时期。）&lt;br /&gt;这样，实际上就只有24％的人能每周固定锻炼身体。&lt;br /&gt;白领最主要的二项病患&lt;br /&gt;高脂血症&lt;br /&gt;脂肪肝&lt;br /&gt;办公室白领一族的 十大饮食危机&lt;br /&gt;不吃早餐&amp;nbsp;&lt;br /&gt;危害： 严重伤胃，使你无法精力充沛地工作，而且还容易 "显老" 。&lt;/p&gt;&#xD;
&lt;p&gt;国外某大学最近一次在接受研究的 7000 个男女对象中，发现习惯不吃早餐的人死亡率高达 40%。&lt;br /&gt;而另一所大学在一次对 80-90 岁老年人的研究中发现，他们长寿的共同点之一是：每天吃一顿丰盛的早餐。&amp;nbsp;&lt;br /&gt;晚餐太丰盛&lt;/p&gt;&#xD;
&lt;p&gt;危害： 傍晚时血液中胰岛素含量为一天中的高峰，胰岛素可使血糖转化成脂肪凝结在血管壁上和腹壁上。晚餐吃得太丰盛，久而久之，人便肥胖起来。&lt;/p&gt;&#xD;
&lt;p&gt;同时，持续时间通常比较长的丰盛晚餐还会破坏人体正常的生物钟，容易使人患上失眠症 。&lt;br /&gt;嗜饮咖啡&amp;nbsp;&lt;br /&gt;危害：容易患心脏病。咖啡中含有高浓度的咖啡因，可使心脏功能发生改变并可使血管中的胆固醇增高。&lt;/p&gt;&#xD;
&lt;p&gt;适量饮用咖啡有提神醒脑的作用，但过多饮用反而会降低工作能力和效率。每喝咖啡超过 5 杯者，其理解能力会有所下降，将难以完成复杂的工作。&lt;/p&gt;&#xD;
&lt;p&gt;食用酒精过量&amp;nbsp;&lt;br /&gt;危害：酒是祸首，长期饮酒，将导致酒精中毒。&lt;br /&gt;慢性嗜酒者致使肝内脂肪氧化减少，近60％发生脂肪肝，20％～30％最终将发展为肝硬化。&lt;/p&gt;&#xD;
&lt;p&gt;餐后吸烟&amp;nbsp;&lt;br /&gt;危害： 使烟中的有害物质更易进入人体。&lt;/p&gt;&#xD;
&lt;p&gt;饭后吸一支烟，中毒量大于平时吸十支烟的总和。因为人在吃饭以后，胃肠蠕动加强，血液循环加快，这时人体吸收烟雾的能力进行"最佳状态"，烟中的毒的物质比平时更容易进入人体，从而更加重了对人体健康的损害程度。&amp;nbsp;&lt;br /&gt;保温杯泡茶&amp;nbsp;&lt;br /&gt;危害： 破坏维生素，大量渗出鞣酸和茶碱。&lt;/p&gt;&#xD;
&lt;p&gt;茶叶中含大量的鞣酸、茶碱、茶香油和多种维生素，用 80 度左右水冲泡比较适宜。&lt;br /&gt;如果用保温杯长时间把茶叶浸泡在高温的水中，就如同用微火煎煮一样，会使茶叶中的维生素全遭破坏，茶香油大量挥发，鞣酸、茶碱大量渗出。这样不仅降低了茶叶的营养价值，推动了茶香，还使有害物质增多。&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;宴席不离生食&amp;nbsp;&lt;br /&gt;危害： 导致各种寄生虫病。&lt;/p&gt;&#xD;
&lt;p&gt;三文鱼、象拔蚌、鲈鱼、乌鱼、生鱼片、蛇、龟、蟹等办公室一族商务宴请时的首选食物中，存在寄生虫和致病菌的几率很高。&lt;br /&gt;再加上厨师们为了追求味道的鲜美，烹调往往不够充分，很容易让你在大快朵颐之时，病从口入。&amp;nbsp;&lt;br /&gt;&amp;nbsp;水果当主食&amp;nbsp;&lt;br /&gt;危害： 造成人体缺乏蛋白质等物质，营养失衡，甚至引发疾病。&lt;/p&gt;&#xD;
&lt;p&gt;很多办公室一族由于长期静坐的工作方式而造成的消化不畅、血脂增高、血管硬化等疾病，确实需要水果中的营养物质来化解。&lt;br /&gt;但是水果不能当主食。因为水果中虽然含多种维生素和糖分，却缺少人体需要的蛋白质和某些微量元素。&amp;nbsp;&lt;br /&gt;进食速度过快&amp;nbsp;&lt;br /&gt;危害： 加重肠胃负担，导致肥胖。&lt;/p&gt;&#xD;
&lt;p&gt;很多办公室一族的午餐，都是在非常匆忙的状态下吃完的。进食速度过快，食物未得到充分咀嚼，不利于口中食物和唾液淀粉酶的初步消化，加重肠胃负担。&lt;br /&gt;咀嚼时间过短，迷走神经仍处在过度兴奋之中，长此以往，容易因食欲亢进而肥胖 。&lt;br /&gt;饮水不足&amp;nbsp;&lt;br /&gt;危害： 导致脑老化；诱发脑血管及心血管疾病；影响肾脏代谢功能。&lt;/p&gt;&#xD;
&lt;p&gt;办公室一族在工作中，由于工作时精神高度集中，很容易忘记喝水，造成体内水分补给不足。体内水分减少，血液浓缩及黏稠增大，容易导致血栓形成，诱发脑血管及心血管疾病。&lt;br /&gt;还会影响肾脏代谢的功能。&lt;br /&gt;干眼症 ，也是体内水分减少的表现。&lt;br /&gt;什么是健康的 饮食结构？&lt;/p&gt;&#xD;
&lt;p&gt;我国传统的膳食结构：是以粮食为主食，副食品多样化，而且主要食用新鲜的天然食品。&lt;/p&gt;&#xD;
&lt;p&gt;国外给予很高评价，称其为防止肥胖和心脑血管病的最佳膳食。&lt;br /&gt;1.&amp;nbsp;&amp;nbsp; 消除人们对粮食存在不实之词&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; A.&amp;nbsp;&amp;nbsp; 一些爱美女性认为粮食吃了会使人发胖。&lt;br /&gt;&amp;nbsp;&amp;nbsp; B.&amp;nbsp;&amp;nbsp; 一些有高血脂，脂肪肝患者认为粮食中糖会转化为脂肪。&lt;br /&gt;&amp;nbsp;&amp;nbsp; C.&amp;nbsp;&amp;nbsp; 有些人怕得糖尿病，认为粮食吃多了会得病。&lt;br /&gt;2.&amp;nbsp; 迅速将烹调用油降下来&amp;nbsp;&lt;br /&gt;第一类：动物脂肪&lt;/p&gt;&#xD;
&lt;p&gt;第二类：反式脂肪酸&lt;/p&gt;&#xD;
&lt;p&gt;第三类：植物油，以多不饱和脂肪酸为主的油脂，&lt;br /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 如花生油，豆油，菜油。&lt;/p&gt;&#xD;
&lt;p&gt;第四类：以单不饱和脂肪酸为主的油脂，如橄榄&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 油，茶油。&lt;br /&gt;3.&amp;nbsp; 蛋白质不能少，也不能多&lt;br /&gt;蛋白质是人体不可缺少的重要营养物质&lt;/p&gt;&#xD;
&lt;p&gt;摄入过多：&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1.氧化产生酸性物质"疲劳素"－－使人疲倦乏力。&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2.增加肝肾负担，代谢要消耗钙质－－易骨质疏松&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3.过多分解产物增加"泡沫细胞"－－动脉粥样硬化&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4.长期摄入过多，"淀粉样蛋白物"，诱发异常细胞生&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 成－－增加患癌的风险。&lt;/p&gt;&#xD;
&lt;p&gt;4.&amp;nbsp; 维生素，微量元素是现代白领最容易缺乏的营养素，人人需要额外补充。&lt;br /&gt;维生素&amp;nbsp;&lt;br /&gt;1.维生素A&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 掌管视力、皮肤、骨骼、及抵抗力。&lt;br /&gt;2.维生素B族&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 可以促进肝脏的代谢和保护饮酒者的肝&amp;nbsp; 脏。是把糖、脂肪、蛋白质等转化成热量时不可缺少的物质。&amp;nbsp;&lt;br /&gt;3.维生素C&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 能抗氧化，调节生理机能，促进铁的吸&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 收，提高对传染病及其他疾病的抵抗力。&amp;nbsp;&lt;br /&gt;4.维生素D&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 和维生素A是不可或缺的好搭档、骨骼、牙齿的必需物质。&amp;nbsp;&lt;br /&gt;5.维生素E&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 能够清除体内的氧自由基，具有抗癌、防衰老、增强机体抵抗能力、改善血液循环。&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;微量元素（矿物质）&amp;nbsp;&lt;br /&gt;钙&amp;nbsp;&amp;nbsp;&amp;nbsp; 是保证人体健康长寿所必不可少的。可防止骨质疏松症。&amp;nbsp; 越来越多的证据表明，钙还有防止高血压和结肠癌能力。&lt;/p&gt;&#xD;
&lt;p&gt;铁&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 是人体需要量最多的微量元素，27%的铁组成血红蛋白，&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 将氧气送至全身组织。&lt;/p&gt;&#xD;
&lt;p&gt;锌&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 是200多种含锌酶的组成成分,也是酶的激活剂，在核酸&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 代谢和蛋白质合成中发挥重要作用。有研究报告证实，对&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 食道癌，肺癌有桔抗作用。&lt;/p&gt;&#xD;
&lt;p&gt;硒&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 抗癌物质中效用最明显，抗癌力最强的元素。对乳腺癌，&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 结肠癌，前列腺癌有桔抗作用。而且又是 很好的抗氧化剂。&lt;br /&gt;&amp;nbsp;&lt;br /&gt;只要做到上述几点，建立" 不吸烟、多锻炼、降血脂 " 的新生活方式,　采用健康的膳食结构 ，才能增进健康，做一个&lt;/p&gt;&#xD;
&lt;p&gt;主动健康的现代白领&lt;/p&gt;&lt;img src="http://www.cnblogs.com/SunWentao/aggbug/2226745.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/SunWentao/archive/2011/10/27/2226745.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/SunWentao/archive/2011/10/16/2214443.html</id><title type="text">how to compile unsafe code in c#</title><summary type="text">how to compile unsafe code in c#turn on unsafe build option in visual studio:1. Open the project&amp;#39;s Properties page.2. Click the Build property page.3.Select the Allow Unsafe Code check box.</summary><published>2011-10-16T15:25:00Z</published><updated>2011-10-16T15:25:00Z</updated><author><name>SunWentao</name><uri>http://www.cnblogs.com/SunWentao/</uri></author><link rel="alternate" href="http://www.cnblogs.com/SunWentao/archive/2011/10/16/2214443.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/SunWentao/archive/2011/10/16/2214443.html"/><content type="html">&lt;p&gt;&lt;span style="font-family: tahoma, arial, helvetica, sans-serif;"&gt;how to compile unsafe code in c#&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: tahoma, arial, helvetica, sans-serif;"&gt;turn on unsafe build option in visual studio:&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: tahoma, arial, helvetica, sans-serif;"&gt;1. Open the project's Properties page.&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: tahoma, arial, helvetica, sans-serif;"&gt;2. Click the Build property page.&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: tahoma, arial, helvetica, sans-serif;"&gt;3.Select the Allow Unsafe Code check box.&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/SunWentao/aggbug/2214443.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/SunWentao/archive/2011/10/16/2214443.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/SunWentao/archive/2011/10/10/2205779.html</id><title type="text">usb 编程知识 总结</title><summary type="text">USB编程知识 总结最近在做usb camera的工作，在网上找到这篇文章，整理了下。慢慢加入我自己的理解。USB编程知识 一 查找USB设备USB编程的第一个步骤就是寻找你插入的USB设备.为了找到你的USB设备,首先要知道你的USB设备的GUID.一种类型的USB设备的GUID是这个类型唯一的。使用下列的几个函数变可以找到你的USB的设备名字: SetupDiGetClassDevs() SetupDiEnumDeviceInfo() SetupDiGetDeviceRegistryProperty() SetupDiEnumDeviceInterfaces() SetupDiGetDev</summary><published>2011-10-10T08:34:00Z</published><updated>2011-10-10T08:34:00Z</updated><author><name>SunWentao</name><uri>http://www.cnblogs.com/SunWentao/</uri></author><link rel="alternate" href="http://www.cnblogs.com/SunWentao/archive/2011/10/10/2205779.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/SunWentao/archive/2011/10/10/2205779.html"/><content type="html">&lt;h1 style="text-align: center;"&gt;&lt;span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12px;"&gt;&lt;strong&gt;&lt;span style="font-size: 13px; color: #0000ff;"&gt;USB编程知识 总结&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12px;"&gt;最近在做usb camera的工作，在网上找到这篇文章，整理了下。慢慢加入我自己的理解。&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12px;"&gt;USB编程知识 一 查找USB设备&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12px;"&gt;USB编程的第一个步骤就是寻找你插入的USB设备.&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12px;"&gt;为了找到你的USB设备,首先要知道你的USB设备的GUID.&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12px;"&gt;一种类型的USB设备的GUID是这个类型唯一的。使用下列的几个函数变可以找到你的USB的设备名字:&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12px; color: #ff0000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SetupDiGetClassDevs()&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12px; color: #ff0000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SetupDiEnumDeviceInfo()&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12px; color: #ff0000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12px; color: #ff0000;"&gt;&amp;nbsp;&amp;nbsp; SetupDiGetDeviceRegistryProperty()&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12px; color: #ff0000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SetupDiEnumDeviceInterfaces()&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12px; color: #ff0000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SetupDiGetDeviceInterfaceDetail()&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12px; color: #ff0000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SetupDiDestroyDeviceInfoList()&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 要仔细的查找一下这些函数的用法,最终你可以得到你要查找的USB设备的设备名字.USB设备的名字不象串口设备的名字那样简单,USB设备的名字是一个长长的字符串,这个字符串是用来继续编程的源头.&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12px;"&gt;USB编程研究之二（DeviceIoControl函数和控制码）&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12px;"&gt;对于USB编程，其中一个函数叫做：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12px;"&gt;BOOL WINAPI DeviceIoControl(&lt;br /&gt;&amp;nbsp; __in&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HANDLE &lt;i&gt;&lt;a  onclick="showTip(this)" href="http://www.cnblogs.com/SunWentao/admin/"&gt;hDevice&lt;/a&gt;&lt;/i&gt;,&lt;br /&gt;&amp;nbsp; __in&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DWORD &lt;i&gt;&lt;a  onclick="showTip(this)" href="http://www.cnblogs.com/SunWentao/admin/"&gt;dwIoControlCode&lt;/a&gt;&lt;/i&gt;,&lt;br /&gt;&amp;nbsp; __in&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPVOID &lt;i&gt;&lt;a  onclick="showTip(this)" href="http://www.cnblogs.com/SunWentao/admin/"&gt;lpInBuffer&lt;/a&gt;&lt;/i&gt;,&lt;br /&gt;&amp;nbsp; __in&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DWORD &lt;i&gt;&lt;a  onclick="showTip(this)" href="http://www.cnblogs.com/SunWentao/admin/"&gt;nInBufferSize&lt;/a&gt;&lt;/i&gt;,&lt;br /&gt;&amp;nbsp; __out&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPVOID &lt;i&gt;&lt;a  onclick="showTip(this)" href="http://www.cnblogs.com/SunWentao/admin/"&gt;lpOutBuffer&lt;/a&gt;&lt;/i&gt;,&lt;br /&gt;&amp;nbsp; __in&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DWORD &lt;i&gt;&lt;a  onclick="showTip(this)" href="http://www.cnblogs.com/SunWentao/admin/"&gt;nOutBufferSize&lt;/a&gt;&lt;/i&gt;,&lt;br /&gt;&amp;nbsp; __out&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPDWORD &lt;i&gt;&lt;a  onclick="showTip(this)" href="http://www.cnblogs.com/SunWentao/admin/"&gt;lpBytesReturned&lt;/a&gt;&lt;/i&gt;,&lt;br /&gt;&amp;nbsp; __in&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPOVERLAPPED &lt;i&gt;&lt;a  onclick="showTip(this)" href="http://www.cnblogs.com/SunWentao/admin/"&gt;lpOverlapped&lt;/a&gt;&lt;/i&gt;&lt;br /&gt;);&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12px;"&gt;这个函数在MSDN中有简单的介绍：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; The &lt;b&gt;DeviceIoControl&lt;/b&gt; function sends a control code directly to a specified device driver, causing the corresponding device to perform the specified operation.&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 也就是说，这个函数是对指定的设备驱动发送控制码，导致设备响应来完成指定的操作。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 首先来说，DeviceToControl（）函数是一个通用函数，从微软的解释中我们就可以看到，它对设备的操作是取决于你发什么样的控制码。在 MSDN中对这个函数介绍的时候，并没有介绍与USB相关的控制码。我也曾经用错了控制码，导致最后使用GetLastError()函数总数得到错误码 50.&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 与USB相关的控制码都定义在DDK的usbioctl.h头文件中。而对这些控制码的描述可以在在线的MSDN中查到，其路径是：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #333300;"&gt;&lt;em&gt;&lt;span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; http://msdn.microsoft.com/en-us/library/aa476234.aspx&lt;/span&gt;&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #333300;"&gt;&lt;em&gt;&lt;span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MSDN Library--&amp;gt;Win32 and COM Development--&amp;gt;Windows Driver Kit--&amp;gt;Device and Driver Technologies--&amp;gt;Buses and Ports--&amp;gt;Buses--&amp;gt;Buses--&amp;gt;USB--&amp;gt;Reference--&amp;gt;I/O Reqsts for USB Client Drivers&lt;/span&gt;&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 其附近的一些目录也介绍了USB开发的一些信息。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 在看其中的控制码的同时，有一个技巧，例如IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION控制码，打开相应的网页，在网页的下面有个结构：USB_DESCRIPTOR_REQST，也就是说 IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION控制码是为了得到 USB_DESCRIPTOR_REQST结构参数的。这样我们就可以把控制码和我们要做的工作对应起来了。&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12px;"&gt;&lt;span style="color: #0000ff;"&gt;usb的通讯基本步骤如下图所示：&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12px;"&gt;&lt;span style="color: #0000ff;"&gt;Host controllers ---&amp;gt; Usb root hub ---&amp;gt; usb functions(devices)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: tahoma,arial,helvetica,sans-serif; color: #000000; font-size: 12px;"&gt;基本步骤：&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1）打开HCD%X&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2) 得到上面的USB root hub&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3) 遍历usb root hub上连接的usb 设备。获取信息&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4）如果有多个usb口，循环前3步。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: tahoma,arial,helvetica,sans-serif; color: #000000; font-size: 12px;"&gt;&lt;span style="color: #ff00ff;"&gt;下面介绍通讯用的几个IOCTL:&lt;/span&gt;&lt;br /&gt;1)&lt;strong&gt;USB_HCD_DRIVERKEY_NAME &lt;/strong&gt;,用于获取USB设备驱动在注册表中的键名。相应的一个结构体是：&lt;span style="color: #0000ff;"&gt;&lt;br /&gt;typedef struct _USB_HCD_DRIVERKEY_NAME &lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; ULONG&amp;nbsp;&amp;nbsp; ActualLength;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; WCHAR&amp;nbsp;&amp;nbsp; DriverKeyName[1];&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&lt;br /&gt;} USB_HCD_DRIVERKEY_NAME, *PUSB_HCD_DRIVERKEY_NAME;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;2）&lt;strong style="background-color: #ffffff; color: black;"&gt;IOCTL_USB_GET_ROOT_HUB_NAME，&lt;/strong&gt;&lt;span style="background-color: #ffffff; color: black;"&gt;用于获取root hub 键名。使用的结构体，跟上面一样。&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;typedef struct _USB_ROOT_HUB_NAME &lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ULONG ActualLength; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; WCHAR RootHubName[1]; &lt;br /&gt;} USB_ROOT_HUB_NAME, *PUSB_ROOT_HUB_NAME;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #333300;"&gt;3&lt;/span&gt;&lt;span style="color: #333300;"&gt;）&lt;/span&gt;&lt;strong&gt;&lt;span style="color: #333300;"&gt;IOCTL_USB_GET_NODE_INFORMATION，&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: #ffffff; color: black;"&gt;&lt;span style="color: #0000ff;"&gt;&lt;span style="color: #000000;"&gt;用于获取连接在root hub上的节点设备信息。也就是我们接在usb口上的所有usb设备的信息，对应的结构体：&lt;br /&gt;&lt;span style="color: #3366ff;"&gt;&lt;span style="color: #0000ff;"&gt;typedef struct _USB_NODE_INFORMATION &lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; USB_HUB_NODE NodeType;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; union {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; USB_HUB_INFORMATION HubInformation;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; USB_MI_PARENT_INFORMATION MiParentInformation;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } u;&lt;br /&gt;} USB_NODE_INFORMATION, *PUSB_NODE_INFORMATION;&lt;br /&gt;&lt;br /&gt;typedef struct _USB_MI_PARENT_INFORMATION &lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ULONG NumberOfInterfaces;&lt;br /&gt;} USB_MI_PARENT_INFORMATION, *PUSB_MI_PARENT_INFORMATION;&lt;br /&gt;&lt;br /&gt;typedef struct _USB_HUB_INFORMATION&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; USB_HUB_DESCRIPTOR HubDescriptor;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; BOOLEAN HubIsBusPowered;&lt;br /&gt;} USB_HUB_INFORMATION, *PUSB_HUB_INFORMATION;&lt;br /&gt;&lt;br /&gt;typedef struct _USB_HUB_DESCRIPTOR&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; UCHAR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bDescriptorLength;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Length of this descriptor&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; UCHAR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bDescriptorType;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Hub configuration type&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; UCHAR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bNumberOfPorts;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // number of ports on this hub&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; USHORT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wHubCharacteristics;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Hub Charateristics&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; UCHAR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bPowerOnToPowerGood;&amp;nbsp;&amp;nbsp;&amp;nbsp; // port power on till power good in 2ms&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; UCHAR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bHubControlCurrent;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // max current in mA&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // room for 255 ports power control and removable bitmask&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; UCHAR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bRemoveAndPowerMask[64];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;} USB_HUB_DESCRIPTOR, *PUSB_HUB_DESCRIPTOR;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: #ffffff; color: black;"&gt;&lt;span style="color: #0000ff;"&gt;&lt;span style="color: #000000;"&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;4) &lt;strong&gt;IOCTL_USB_GET_NODE_CONNECTION_INFORMATION, &lt;/strong&gt;用于获取接在usb口上的单个usb设备的信息，对应的结构体：&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&lt;br /&gt;typedef struct _USB_NODE_CONNECTION_INFORMATION &lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ULONG ConnectionIndex;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; USB_DEVICE_DESCRIPTOR DeviceDescriptor;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; UCHAR CurrentConfigurationValue;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; BOOLEAN LowSpeed;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; BOOLEAN DeviceIsHub;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; USHORT DeviceAddress;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ULONG NumberOfOpenPipes;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; USB_CONNECTION_STATUS ConnectionStatus;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; USB_PIPE_INFO PipeList[0];&lt;br /&gt;} USB_NODE_CONNECTION_INFORMATION, *PUSB_NODE_CONNECTION_INFORMATION;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;4）IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION，&lt;/strong&gt; 用于获取usb设备的描述信息。&lt;span style="background-color: #ffffff; color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;typedef struct _USB_DEVICE_DESCRIPTOR &lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; UCHAR bLength;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; UCHAR bDescriptorType;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; USHORT bcdUSB;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; UCHAR bDeviceClass;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; UCHAR bDeviceSubClass;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; UCHAR bDeviceProtocol;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; UCHAR bMaxPacketSize0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; USHORT idVendor;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; USHORT idProduct;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; USHORT bcdDevice;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; UCHAR iManufacturer;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; UCHAR iProduct;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; UCHAR iSerialNumber;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; UCHAR bNumConfigurations;&lt;br /&gt;} USB_DEVICE_DESCRIPTOR, *PUSB_DEVICE_DESCRIPTOR;&lt;br /&gt;&lt;br /&gt;typedef enum _USB_CONNECTION_STATUS &lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; NoDeviceConnected,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DeviceConnected,&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* failure codes, these map to fail reasons */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DeviceFailedEnumeration,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DeviceGeneralFailure,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DeviceCausedOvercurrent,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DeviceNotEnoughPower,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DeviceNotEnoughBandwidth,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DeviceHubNestedTooDeeply,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DeviceInLegacyHub&lt;br /&gt;} USB_CONNECTION_STATUS, *PUSB_CONNECTION_STATUS;&lt;br /&gt;&lt;br /&gt;typedef struct _USB_PIPE_INFO&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; USB_ENDPOINT_DESCRIPTOR EndpointDescriptor;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ULONG ScheduleOffset;&lt;br /&gt;} USB_PIPE_INFO, *PUSB_PIPE_INFO;&lt;br /&gt;&lt;br /&gt;typedef struct _USB_ENDPOINT_DESCRIPTOR&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; UCHAR bLength;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; UCHAR bDescriptorType;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; UCHAR bEndpointAddress;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; UCHAR bmAttributes;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; USHORT wMaxPacketSize;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; UCHAR bInterval;&lt;br /&gt;} USB_ENDPOINT_DESCRIPTOR, *PUSB_ENDPOINT_DESCRIPTOR;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12px;"&gt;需要注意一点，如果要得到pid,vid,则直接从&lt;/span&gt;&lt;span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12px;"&gt;USB_DEVICE_DESCRIPTOR结构中取出idVendor，idProduct这两项的值就行了。如果要得到序列号，则不是取出 iSerialNumber就可以的。这里的 iSerialNumber仅仅是一个索引值。如果想得到序列号，就需要定义一个结构，然后给设备发送个请求。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: center;"&gt;&lt;strong&gt;&lt;span style="color: #000000;"&gt;&lt;span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12px;"&gt;USB编程知识之四 Usb device Faq&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p align="left"&gt;&lt;strong&gt;How can my application detect when my device is attached or removed?&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;To find out when a device has been attached or removed, catch the WM_DEVICECHANGE messege with the parameter DBT_DEVNODES_CHANGED. Then use SetupDi_ functions to find out what device was attached or removed. A Usenet post on the subject is &lt;a href="http://groups.google.com/groups?hl=en&amp;amp;lr=lang_en&amp;amp;ie=UTF-8&amp;amp;oe=UTF-8&amp;amp;selm=OeAq%248alCHA.1928%40tkmsftngp07"&gt;USB Device Insertion/Removal Event Notification&lt;/a&gt;. Also see my &lt;a href="http://lvr.com/hidpage.htm#MyExampleCode"&gt;example code&lt;/a&gt;.&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;strong&gt;How can my application reset, disable, or restart a USB device?&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;The DevCon example in the &lt;a href="http://www.microsoft.com/whdc/devtools/wdk/WDKpkg.mspx"&gt;WDK&lt;/a&gt; is a command-line utility that shows how to enable, disable, restart, update, remove and query devices using the SetupAPI and CfgMgr32 API functions.&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;strong&gt;How can I determine which port my device is attached to?&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;Under Windows, every device has a unique driver key, also called the software key. You can obtain the key from a device using SetupDi functions, and obtain the same key from a hub port using undocumented DeviceIoControl codes. When you have a match, you know which port the device is attached to.&lt;/p&gt;&#xD;
&lt;p align="left"&gt;To retrieve the driver key name for a device, call SetupDiGetClassDevs and SetupDiEnumDeviceInfo, then use SetupDiGetDeviceRegistryPropertyA with Property set to SPDRP_DRIVER.&lt;/p&gt;&#xD;
&lt;p align="left"&gt;To retrieve the driver key name for a hub port, first find the hubs with SetupDi_ functions and GUID_DEVINTERFACE_USB_HUB.&lt;/p&gt;&#xD;
&lt;p align="left"&gt;Obtain a handle to a hub with CreateFile.&lt;/p&gt;&#xD;
&lt;p align="left"&gt;Get the number of ports on the hub with IOCTL_USB_GET_NODE_INFORMATION (undocumented IO control code in usbioctl.h).&lt;/p&gt;&#xD;
&lt;p align="left"&gt;Find out if a device is attached to a port with IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX.&lt;/p&gt;&#xD;
&lt;p align="left"&gt;For each attached device, get the driver key name with IOCTL_USB_GET_NODE_CONNECTION_DRIVERKEY_NAME (undocumented IO control code in usbioctl.h).&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;I have two or more identical devices attached to a host. How can I tell which is which?&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Store a serial number in the device descriptor or use another vendor-specific identifier. For HID-class devices, applications can read the serial number with the HidD_GetSerialNumberString function.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;I've made changes to my device's firmware but Windows doesn't seem to recognize the changes.&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;With the device attached, remove the device in Windows Device Manager. Then detach and reattach the device.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;Is there a limit to the maximum size of a transfer?&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;See &lt;a href="http://support.microsoft.com/default.aspx?scid=kb;en-us;832430"&gt;Maximum size of USB transfers on various operating systems&lt;/a&gt; (Microsoft Knowledge Base Article 832430).&lt;/p&gt;&#xD;
&lt;p&gt;These values are the maximum amount of data a WDM driver can request to send or receive in a single USB Request Block (URB). An application may request to send or receive more or less than this amount. The driver can handle larger amounts by using multiple URBs. A specific device may have stricter limits on transfer size.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;During device testing, we attach many devices that are identical except for the serial numbers. How can I prevent Windows from asking to install a new driver every time a device is attached?&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;The method described below causes Windows 2000 and XP to ignore a device's serial number. It's recommended for test environments only.&lt;/p&gt;&#xD;
&lt;p&gt;This registry key controls whether Windows uses or ignores device serial numbers:&lt;/p&gt;&#xD;
&lt;p&gt;[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\UsbFlags]&lt;/p&gt;&#xD;
&lt;p&gt;It's possible to ignore all serial numbers, though this approach is NOT recommended. To ignore all serial numbers, in the above key, change this value to zero:&lt;/p&gt;&#xD;
&lt;p&gt;GlobalDisableSerNumGen = 1&lt;/p&gt;&#xD;
&lt;p&gt;To ignore the serial number for an individual device, create an entry under the above ...\UsbFlags key. The name must start with "IgnoreHWSerNum" followed by the vendor and product ID of the device. A value of 1 = "disable the serial number."&lt;/p&gt;&#xD;
&lt;p&gt;Example (Vendor ID = 0925h, Product ID = 016Ah):&lt;/p&gt;&#xD;
&lt;p&gt;IgnoreHWSerNum0925016A= 1&lt;/p&gt;&#xD;
&lt;p&gt;(Thanks to Dieter Fauth for this answer.)&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;How is the USB data CRC value calculated?&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Here are two examples.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.lvr.com/files/usb_crc.c"&gt;Example 1&lt;/a&gt; from Ron Hemphill.&lt;/p&gt;&#xD;
&lt;p&gt;Example 2 from Barry Twycross:&lt;/p&gt;&#xD;
&lt;p&gt;This is not suitable for use as production code; it is very inefficient:&lt;/p&gt;&#xD;
&lt;pre&gt;&lt;span style="font-family: Courier New, Courier, mono; font-size: 12px;" face="Courier New, Courier, mono"&gt;UInt16 CRC16(void *buffer, UInt32 count) &lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span style="font-family: Courier New, Courier, mono; font-size: 12px;" face="Courier New, Courier, mono"&gt;{ &lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span style="font-family: Courier New, Courier, mono; font-size: 12px;" face="Courier New, Courier, mono"&gt;    UInt8 *bp; &lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span style="font-family: Courier New, Courier, mono; font-size: 12px;" face="Courier New, Courier, mono"&gt;    UInt32 poly, a, b, newBit, lostBit; int i; &lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span style="font-family: Courier New, Courier, mono; font-size: 12px;" face="Courier New, Courier, mono"&gt;    poly = 0x8005; &lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span style="font-family: Courier New, Courier, mono; font-size: 12px;" face="Courier New, Courier, mono"&gt;    a = 0xffff; &lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span style="font-family: Courier New, Courier, mono; font-size: 12px;" face="Courier New, Courier, mono"&gt;    bp = buffer; &lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span style="font-family: Courier New, Courier, mono; font-size: 12px;" face="Courier New, Courier, mono"&gt;    while(count--) &lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span style="font-family: Courier New, Courier, mono; font-size: 12px;" face="Courier New, Courier, mono"&gt;    { &lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span style="font-family: Courier New, Courier, mono; font-size: 12px;" face="Courier New, Courier, mono"&gt;        b = *(bp++); &lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span style="font-family: Courier New, Courier, mono; font-size: 12px;" face="Courier New, Courier, mono"&gt;        for(i = 0; i&amp;lt;8; i++) &lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span style="font-family: Courier New, Courier, mono; font-size: 12px;" face="Courier New, Courier, mono"&gt;        { &lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span style="font-family: Courier New, Courier, mono; font-size: 12px;" face="Courier New, Courier, mono"&gt;            a &amp;lt;&amp;lt;= 1; &lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span style="font-family: Courier New, Courier, mono; font-size: 12px;" face="Courier New, Courier, mono"&gt;            newBit = (b &amp;amp; 1); &lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span style="font-family: Courier New, Courier, mono; font-size: 12px;" face="Courier New, Courier, mono"&gt;            b &amp;gt;&amp;gt;= 1; &lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span style="font-family: Courier New, Courier, mono; font-size: 12px;" face="Courier New, Courier, mono"&gt;            lostBit = a &amp;gt;&amp;gt; 16; &lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span style="font-family: Courier New, Courier, mono; font-size: 12px;" face="Courier New, Courier, mono"&gt;            if(newBit != lostBit) &lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span style="font-family: Courier New, Courier, mono; font-size: 12px;" face="Courier New, Courier, mono"&gt;            { &lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span style="font-family: Courier New, Courier, mono; font-size: 12px;" face="Courier New, Courier, mono"&gt;                    a ^= poly; &lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span style="font-family: Courier New, Courier, mono; font-size: 12px;" face="Courier New, Courier, mono"&gt;            } &lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span style="font-family: Courier New, Courier, mono; font-size: 12px;" face="Courier New, Courier, mono"&gt;            a &amp;amp;= 0xffff; &lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span style="font-family: Courier New, Courier, mono; font-size: 12px;" face="Courier New, Courier, mono"&gt;        } &lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span style="font-family: Courier New, Courier, mono; font-size: 12px;" face="Courier New, Courier, mono"&gt;    } &lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span style="font-size: 12px;"&gt;&lt;span style="font-family: Courier New, Courier, mono;" face="Courier New, Courier, mono"&gt;return(a^0xffff); &lt;/span&gt;&#xD;
&#xD;
}&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/blockquote&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: center;"&gt;&lt;strong&gt;&lt;span style="color: #000000;"&gt;&lt;span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12px;"&gt;USB 编程知识之五 Host controller , Hubs, &amp;amp; Functions &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;USB is implemented in terms of software drivers (which I don't discuss here) and hardware. The hardware divides into host controllers, hubs, and functions:&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;&#xD;
&lt;p&gt;The &lt;em&gt;host controller&lt;/em&gt; connects a tree of USB devices to a &lt;em&gt;host&lt;/em&gt; (computer, console, and so on). Multiple host controllers can be present. Each host controller anchors one &lt;em&gt;device tree&lt;/em&gt;.&lt;/p&gt;&#xD;
&lt;/li&gt;&#xD;
&lt;li&gt;&#xD;
&lt;p&gt;A &lt;em&gt;hub&lt;/em&gt; is a device with multiple &lt;em&gt;ports&lt;/em&gt;, into which are plugged other hubs and functions. The &lt;em&gt;root hub&lt;/em&gt; integrates with the host controller. All other hubs are &lt;em&gt;external hubs&lt;/em&gt;.&lt;/p&gt;&#xD;
&lt;/li&gt;&#xD;
&lt;li&gt;&#xD;
&lt;p&gt;A &lt;em&gt;function&lt;/em&gt; is a device that provides a capability to the host. It plugs into a hub (external or root). Mice, keyboards, cameras, scanners, and printers are examples.&lt;/p&gt;&#xD;
&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;This hardware arranges into a tiered-star topology where each star's center is a hub: both the root hub and external hubs sit at the center of their connected external hubs/functions. Figure 1 reveals this topology.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #000000;"&gt;&lt;span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12px;"&gt;&lt;span style="color: #000000;"&gt;&lt;span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12px;"&gt;&lt;span style="color: #000000;"&gt;&lt;span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12px;"&gt;&lt;img alt="" src="http://pic002.cnblogs.com/images/2011/26751/2011101117133528.gif" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;h5 id="configurations-interfaces-and-endpoints"&gt;&lt;span style="font-size: 14px;"&gt;Configurations, Interfaces, and Endpoints&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;A function can have one or more &lt;em&gt;configurations&lt;/em&gt; that control how the function behaves. Configurations can differ in how much power they consume, whether and how they remotely wake up a suspended computer, and more.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;A trackball device that can be configured as a mouse or as a joystick is an example of a function with multiple configurations. Another example is an Integrated Services Digital Network (ISDN) communications device that offers one 128Kb channel or two 56Kb channels.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Each configuration contains one or more &lt;em&gt;interfaces&lt;/em&gt; that specify how software accesses the hardware. Interfaces frequently have &lt;em&gt;alternate settings&lt;/em&gt; corresponding to different bandwidth requirements.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;An interface exposes &lt;em&gt;endpoints&lt;/em&gt; that each serve as a data transfer source or a data transfer destination. Each endpoint supports data transfer in a single direction and has a unique numeric identifier. Figure 2 relates endpoints to interfaces and configurations.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #000000;"&gt;&lt;span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12px;"&gt;&lt;span style="color: #000000;"&gt;&lt;span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12px;"&gt;&lt;span style="color: #000000;"&gt;&lt;span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12px;"&gt;&lt;span style="color: #000000;"&gt;&lt;span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12px;"&gt;&lt;span style="color: #000000;"&gt;&lt;span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12px;"&gt;&lt;span style="color: #000000;"&gt;&lt;span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12px;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/SunWentao/aggbug/2205779.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/SunWentao/archive/2011/10/10/2205779.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/SunWentao/archive/2011/10/08/2202294.html</id><title type="text">usb 视频设备 按钮消息处理 和普通usb连接的事件处理</title><summary type="text">usb 视频设备 按钮消息处理 和普通usb连接的事件处理(c#版，c++/c可仿照修改)最近要做个usb camera的例子，试过了很多方法，一般的usb连接的处理方法：(1) define message variables in form class: publicconstintWM_DEVICECHANGE = 0x219;publicconstintDBT_DEVICEARRIVAL = 0x8000;publicconstintDBT_CONFIGCHANGECANCELED = 0x0019;publicconstintDBT_CONFIGCHANGED = 0x0018;..</summary><published>2011-10-08T08:50:00Z</published><updated>2011-10-08T08:50:00Z</updated><author><name>SunWentao</name><uri>http://www.cnblogs.com/SunWentao/</uri></author><link rel="alternate" href="http://www.cnblogs.com/SunWentao/archive/2011/10/08/2202294.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/SunWentao/archive/2011/10/08/2202294.html"/><content type="html">&lt;p&gt;usb 视频设备 按钮消息处理 和普通usb连接的事件处理&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;(c#版，c++/c可仿照修改)&lt;/p&gt;&#xD;
&lt;p&gt;最近要做个usb camera的例子，试过了很多方法，一般的usb连接的处理方法：&lt;/p&gt;&#xD;
&lt;p&gt;(1) define message variables in form class:&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span  style="color: #4b4b4b; font-family: georgia, verdana, Arial, helvetica, sans-seriff; font-size: 13px; line-height: 19px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;const&lt;/span&gt;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;int&lt;/span&gt;&amp;nbsp;WM_DEVICECHANGE = 0x219;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;const&lt;/span&gt;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;int&lt;/span&gt;&amp;nbsp;DBT_DEVICEARRIVAL = 0x8000;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;const&lt;/span&gt;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;int&lt;/span&gt;&amp;nbsp;DBT_CONFIGCHANGECANCELED = 0x0019;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;const&lt;/span&gt;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;int&lt;/span&gt;&amp;nbsp;DBT_CONFIGCHANGED = 0x0018;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;const&lt;/span&gt;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;int&lt;/span&gt;&amp;nbsp;DBT_CUSTOMEVENT = 0x8006;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;const&lt;/span&gt;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;int&lt;/span&gt;&amp;nbsp;DBT_DEVICEQUERYREMOVE = 0x8001;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;const&lt;/span&gt;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;int&lt;/span&gt;&amp;nbsp;DBT_DEVICEQUERYREMOVEFAILED = 0x8002;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;const&lt;/span&gt;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;int&lt;/span&gt;&amp;nbsp;DBT_DEVICEREMOVECOMPLETE = 0x8004;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;const&lt;/span&gt;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;int&lt;/span&gt;&amp;nbsp;DBT_DEVICEREMOVEPENDING = 0x8003;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;const&lt;/span&gt;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;int&lt;/span&gt;&amp;nbsp;DBT_DEVICETYPESPECIFIC = 0x8005;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;const&lt;/span&gt;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;int&lt;/span&gt;&amp;nbsp;DBT_DEVNODES_CHANGED = 0x0007;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;const&lt;/span&gt;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;int&lt;/span&gt;&amp;nbsp;DBT_QUERYCHANGECONFIG = 0x0017;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;const&lt;/span&gt;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;int&lt;/span&gt;&amp;nbsp;DBT_USERDEFINED = 0xFFFF;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span  style="color: #4b4b4b; font-family: georgia, verdana, Arial, helvetica, sans-seriff; font-size: 13px; line-height: 19px;"&gt;&lt;/span&gt;&lt;span  style="color: #4b4b4b; font-family: georgia, verdana, Arial, helvetica, sans-seriff; font-size: 13px; line-height: 19px;"&gt;(2) &amp;nbsp;override form class WndProc method:&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span  style="color: #4b4b4b; font-family: georgia, verdana, Arial, helvetica, sans-seriff; font-size: 13px; line-height: 19px;"&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;protected&lt;/span&gt;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;override&lt;/span&gt;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;void&lt;/span&gt;&amp;nbsp;WndProc(&lt;span style="line-height: 19px; color: #0000ff;"&gt;ref&lt;/span&gt;&amp;nbsp;Message m)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&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;&lt;span style="line-height: 19px; color: #0000ff;"&gt;try&lt;/span&gt;&lt;br /&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;{&lt;br /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;if&lt;/span&gt;&amp;nbsp;(m.Msg == WM_DEVICECHANGE)&lt;br /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;switch&lt;/span&gt;&amp;nbsp;(m.WParam.ToInt32())&lt;br /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;case&lt;/span&gt;&amp;nbsp;WM_DEVICECHANGE:&lt;br /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;break&lt;/span&gt;;&lt;br /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;case&lt;/span&gt;&amp;nbsp;DBT_DEVICEARRIVAL:&lt;span style="line-height: 19px; color: #008000;"&gt;//U盘插入&lt;/span&gt;&lt;br /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DriveInfo[] s = DriveInfo.GetDrives();&lt;br /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;foreach&lt;/span&gt;&amp;nbsp;(DriveInfo drive&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;in&lt;/span&gt;&amp;nbsp;s)&lt;br /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;if&lt;/span&gt;&amp;nbsp;(drive.DriveType == DriveType.Removable)&lt;br /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;listBox1.Items.Add("&lt;span style="line-height: 19px; color: #8b0000;"&gt;U盘已插入，盘符为:&lt;/span&gt;" + drive.Name.ToString());&lt;br /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;break&lt;/span&gt;;&lt;br /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;break&lt;/span&gt;;&lt;br /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;case&lt;/span&gt;&amp;nbsp;DBT_CONFIGCHANGECANCELED:&lt;br /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;break&lt;/span&gt;;&lt;br /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;case&lt;/span&gt;&amp;nbsp;DBT_CONFIGCHANGED:&lt;br /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;break&lt;/span&gt;;&lt;br /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;case&lt;/span&gt;&amp;nbsp;DBT_CUSTOMEVENT:&lt;br /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;break&lt;/span&gt;;&lt;br /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;case&lt;/span&gt;&amp;nbsp;DBT_DEVICEQUERYREMOVE:&lt;br /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;break&lt;/span&gt;;&lt;br /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;case&lt;/span&gt;&amp;nbsp;DBT_DEVICEQUERYREMOVEFAILED:&lt;br /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;break&lt;/span&gt;;&lt;br /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;case&lt;/span&gt;&amp;nbsp;DBT_DEVICEREMOVECOMPLETE:&amp;nbsp;&lt;span style="line-height: 19px; color: #008000;"&gt;//U盘卸载&lt;/span&gt;&lt;br /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;break&lt;/span&gt;;&lt;br /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;case&lt;/span&gt;&amp;nbsp;DBT_DEVICEREMOVEPENDING:&lt;br /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;break&lt;/span&gt;;&lt;br /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;case&lt;/span&gt;&amp;nbsp;DBT_DEVICETYPESPECIFIC:&lt;br /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;break&lt;/span&gt;;&lt;br /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;case&lt;/span&gt;&amp;nbsp;DBT_DEVNODES_CHANGED:&lt;br /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;break&lt;/span&gt;;&lt;br /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;case&lt;/span&gt;&amp;nbsp;DBT_QUERYCHANGECONFIG:&lt;br /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;break&lt;/span&gt;;&lt;br /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;case&lt;/span&gt;&amp;nbsp;DBT_USERDEFINED:&lt;br /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;break&lt;/span&gt;;&lt;br /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;default&lt;/span&gt;:&lt;br /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="line-height: 19px; color: #0000ff;"&gt;break&lt;/span&gt;;&lt;br /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&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;}&lt;br /&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;&lt;span style="line-height: 19px; color: #0000ff;"&gt;catch&lt;/span&gt;&amp;nbsp;(Exception ex)&lt;br /&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;{&lt;br /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MessageBox.Show(ex.Message);&lt;br /&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;}&lt;br /&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;&lt;span style="line-height: 19px; color: #0000ff;"&gt;base&lt;/span&gt;.WndProc(&lt;span style="line-height: 19px; color: #0000ff;"&gt;ref&lt;/span&gt;&amp;nbsp;m);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span  style="color: #4b4b4b; font-family: georgia, verdana, Arial, helvetica, sans-seriff; font-size: 13px; line-height: 19px;"&gt;此法的局限性：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span  style="color: #4b4b4b; font-family: georgia, verdana, Arial, helvetica, sans-seriff; font-size: 13px; line-height: 19px;"&gt;&lt;/span&gt;&lt;span  style="color: #4b4b4b; font-family: georgia, verdana, Arial, helvetica, sans-seriff; font-size: 13px; line-height: 19px;"&gt;对于一般的u盘(u disk/storage)，可以处理u盘的insert/remove事件，但是不能处理如camera之类非存储的usb device.&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/SunWentao/aggbug/2202294.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/SunWentao/archive/2011/10/08/2202294.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/SunWentao/archive/2011/10/03/2198674.html</id><title type="text">stl中的仿函数functor的应用</title><summary type="text">stl中的仿函数functor的应用在stl的泛型算法中，functor应用甚多。template &amp;lt;typename T&amp;gt;struct plus{ T operator ()(const T&amp;amp; x, const T&amp;amp; y) { return x + y; }};template &amp;lt;typename T&amp;gt;struct minus{ T operator ()(const T&amp;amp; x, const T&amp;amp; y) { return x - y; }};void test(){ plus&amp;lt;int&amp;gt; plusObj; minus&amp;lt;i</summary><published>2011-10-03T13:36:00Z</published><updated>2011-10-03T13:36:00Z</updated><author><name>SunWentao</name><uri>http://www.cnblogs.com/SunWentao/</uri></author><link rel="alternate" href="http://www.cnblogs.com/SunWentao/archive/2011/10/03/2198674.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/SunWentao/archive/2011/10/03/2198674.html"/><content type="html">&lt;p style="text-align: center;"&gt;&lt;strong&gt;&lt;span style="font-family: tahoma, arial, helvetica, sans-serif; font-size: 12px;"&gt;stl中的仿函数functor的应用&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: tahoma, arial, helvetica, sans-serif; font-size: 12px;"&gt;在stl的泛型算法中，functor应用甚多。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;template &amp;lt;typename T&amp;gt;&#xD;
struct plus&#xD;
{&#xD;
    T operator ()(const T&amp;amp; x, const T&amp;amp; y) { return x + y; }&#xD;
};&#xD;
&#xD;
template &amp;lt;typename T&amp;gt;&#xD;
struct minus&#xD;
{&#xD;
    T operator ()(const T&amp;amp; x, const T&amp;amp; y) { return x - y; }&#xD;
};&#xD;
&#xD;
void test()&#xD;
{&#xD;
    plus&amp;lt;int&amp;gt; plusObj;&#xD;
    minus&amp;lt;int&amp;gt; minusObj;&#xD;
&#xD;
    cout &amp;lt;&amp;lt; plusObj(32, 45) &amp;lt;&amp;lt; endl;&#xD;
    cout &amp;lt;&amp;lt; minusObj(32, 45) &amp;lt;&amp;lt; endl;&#xD;
&#xD;
    cout &amp;lt;&amp;lt; plus&amp;lt;int&amp;gt;()(32, 45) &amp;lt;&amp;lt; endl;&#xD;
    cout &amp;lt;&amp;lt; minus&amp;lt;int&amp;gt;()(32, 45) &amp;lt;&amp;lt; endl;&#xD;
}&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 12px;"&gt;在泛型算法中，应用甚多的是后面的那种&amp;ldquo;匿名对象&amp;rdquo;，因为很多algorithm中，匿名对象的生命周期在算法中，出了算法后匿名对象销毁。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 12px;"&gt;举例：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;inner_product(iv.begin(), iv.end(), iv.begin(), 10, minus&amp;lt;int&amp;gt;(), plus&amp;lt;int&amp;gt;())&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;adjacent_difference(iv.begin(), iv.end(), oite, plus&amp;lt;int&amp;gt;());&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: tahoma, arial, helvetica, sans-serif; font-size: 12px;"&gt;传递的都是functor的匿名对象。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: tahoma, arial, helvetica, sans-serif; font-size: 12px;"&gt;functor，说白了就是对operator()的重载。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="text-decoration: underline;"&gt;&lt;strong&gt;&lt;span style="font-family: tahoma, arial, helvetica, sans-serif; font-size: 12px;"&gt;问：在c++中不能重载的符号是什么?&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: tahoma, arial, helvetica, sans-serif; font-size: 12px;"&gt;大多数的运算符能够被程序员重载。例外的是（&lt;em&gt;&lt;strong&gt;4个&lt;/strong&gt;&lt;/em&gt;）： &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 12px;"&gt;&lt;span style="text-decoration: underline;"&gt;&lt;strong&gt;&lt;span style="font-family: tahoma, arial, helvetica, sans-serif;"&gt;&amp;nbsp; &amp;nbsp; . (点符号) &amp;nbsp;:: &amp;nbsp;?: &amp;nbsp;sizeof&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 12px;"&gt;&lt;span style="text-decoration: underline;"&gt;&lt;strong&gt;&lt;span style="font-family: tahoma, arial, helvetica, sans-serif;"&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;（1） 理论上来说，.（点运算符）可以通过使用和-&amp;gt;一样的技术来进行重载。但是，这样做会导致一个问题，那就是无法确定操作的是重载了.的对象呢，还是通过.引用的一个对象。例如：&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 12px;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;class Y { &#xD;
    public: &#xD;
        void f(); &#xD;
        // ... &#xD;
    }; &#xD;
&#xD;
    class X {   // 假设你能重载. &#xD;
        Y* p; &#xD;
        Y&amp;amp; operator.() { return *p; } &#xD;
        void f(); &#xD;
        // ... &#xD;
    }; &#xD;
&#xD;
    void g(X&amp;amp; x) &#xD;
    { &#xD;
        x.f();  // X::f还是Y::f还是错误？ &#xD;
    }  &lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;这个问题能够用几种不同的方法解决。在标准化的时候，哪种方法最好还没有定论。　　&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: tahoma, arial, helvetica, sans-serif; font-size: 12px;"&gt;(2) 在 N::m 中，无论 N 还是 m 都不是值的表达式；N 和 m 是编译器知道的名字，::执行一个&lt;/span&gt;&lt;span style="font-family: tahoma, arial, helvetica, sans-serif; font-size: 12px;"&gt;（编译期的）范围解析，而不是表达式求值。你可以想象一下，允许重载 x::y的话，x 可能是一个对象而不是一个名字空间（namespace）或者一个类，这样就会导致&amp;mdash;&amp;mdash;与原来的表现相反&amp;mdash;&amp;mdash;产生新的语法（允许 表达式 1::表达式 2）。很明显，这种复杂性不会带来任何好处。&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: tahoma, arial, helvetica, sans-serif; font-size: 12px;"&gt;(3) 并没有什么根本的原因要禁止重载?:。仅仅是因为，我没有发现有哪种特殊的情况需要重载一个三元运算符。注意一个重载了 表达式1？表达式2：表达式 3 的函数，不能够保证表达式 2：表达式3中只有一个会被执行。&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: tahoma, arial, helvetica, sans-serif; font-size: 12px;"&gt;(4) sizeof 不能够被重载是因为内建的操作（built-in operations），诸如对一个指向数组的指针进行增量操作，必须依靠它。考虑一下：&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;X a[10]; &#xD;
    X* p = &amp;amp;a[3]; &#xD;
    X* q = &amp;amp;a[3]; &#xD;
    p++;    // p指向a[4], 那么p 的整型值必须比 q的整型值大出一个 sizeof(X) &lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: tahoma, arial, helvetica, sans-serif; font-size: 12px;"&gt;所以，sizeof(X)不能由程序员来赋予一个不同的新意义，以免违反基本的语法。&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: tahoma, arial, helvetica, sans-serif; font-size: 12px;"&gt;更多的细节，请参见《&lt;strong&gt;C++语言的设计和演变&lt;/strong&gt;》。　　&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 12px;"&gt;Bjarne Stroustrup FAQ:&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www2.research.att.com/~bs/bs_faq.html"&gt;http://www2.research.att.com/~bs/bs_faq.html&lt;/a&gt;　　&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 12px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: tahoma, arial, helvetica, sans-serif; font-size: 12px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/SunWentao/aggbug/2198674.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/SunWentao/archive/2011/10/03/2198674.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/SunWentao/archive/2011/10/03/2198515.html</id><title type="text">atl/wtl中运用的非虚函数多态</title><summary type="text">atl/wtl中运用的非虚函数多态template &amp;lt;typename T&amp;gt;class B1{public: void SayHi() { T *pT = static_cast&amp;lt;T*&amp;gt;(this); pT-&amp;gt;PrintClassName(); }protected: void PrintClassName() { cout &amp;lt;&amp;lt; &amp;quot;B1&amp;quot; &amp;lt;&amp;lt; endl; }};class D1 : public B1&amp;lt;D1&amp;gt;{ // no overridden function at all};class D2 : pu</summary><published>2011-10-03T06:25:00Z</published><updated>2011-10-03T06:25:00Z</updated><author><name>SunWentao</name><uri>http://www.cnblogs.com/SunWentao/</uri></author><link rel="alternate" href="http://www.cnblogs.com/SunWentao/archive/2011/10/03/2198515.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/SunWentao/archive/2011/10/03/2198515.html"/><content type="html">&lt;p&gt;&lt;span style="font-family: tahoma, arial, helvetica, sans-serif;"&gt;atl/wtl中运用的非虚函数多态&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;template &amp;lt;typename T&amp;gt;&#xD;
class B1&#xD;
{&#xD;
public:&#xD;
    void SayHi()&#xD;
    {&#xD;
        T *pT = static_cast&amp;lt;T*&amp;gt;(this);&#xD;
        pT-&amp;gt;PrintClassName();&#xD;
    }&#xD;
&#xD;
protected:&#xD;
    void PrintClassName()&#xD;
    {&#xD;
        cout &amp;lt;&amp;lt; "B1" &amp;lt;&amp;lt; endl;&#xD;
    }&#xD;
};&#xD;
&#xD;
class D1 : public B1&amp;lt;D1&amp;gt;&#xD;
{&#xD;
    // no overridden function at all&#xD;
};&#xD;
&#xD;
class D2 : public B1&amp;lt;D2&amp;gt;&#xD;
{&#xD;
public:&#xD;
    void PrintClassName()&#xD;
    {&#xD;
        cout &amp;lt;&amp;lt; "D2" &amp;lt;&amp;lt; endl;&#xD;
    }&#xD;
};&#xD;
&#xD;
void testAtlWtl()&#xD;
{&#xD;
    D1 d1;&#xD;
    D2 d2;&#xD;
    d1.SayHi();&#xD;
    d2.SayHi();&#xD;
}&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;这是一种运用模板机制实现c++中多态的一种方法，避免了虚函数的vtable的开销，是理解atl/wtl的最基本的原理。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/SunWentao/aggbug/2198515.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/SunWentao/archive/2011/10/03/2198515.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/SunWentao/archive/2011/10/02/2198336.html</id><title type="text">正确区分++operator 与 operator ++</title><summary type="text">正确区分++operator 与 operator ++一直以来对++operator 和 operator++在函数重载时的用法不理解。在看了c++ primer &amp;amp; effective c++之后，终于明白:T&amp;amp; operator ++(){ cout &amp;lt;&amp;lt; &amp;quot;override ++operator&amp;quot; &amp;lt;&amp;lt; endl;}T&amp;amp; operator++(int){ T tmp = *this; cout &amp;lt;&amp;lt; &amp;quot;override operator++&amp;quot; &amp;lt;&amp;lt; endl; (*this)</summary><published>2011-10-02T15:39:00Z</published><updated>2011-10-02T15:39:00Z</updated><author><name>SunWentao</name><uri>http://www.cnblogs.com/SunWentao/</uri></author><link rel="alternate" href="http://www.cnblogs.com/SunWentao/archive/2011/10/02/2198336.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/SunWentao/archive/2011/10/02/2198336.html"/><content type="html">&lt;p style="text-align: center;"&gt;正&lt;span style="font-family: tahoma, arial, helvetica, sans-serif;"&gt;确区分++operator 与 operator ++&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: tahoma, arial, helvetica, sans-serif;"&gt;一直以来对++operator 和 operator++在函数重载时的用法不理解。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: tahoma, arial, helvetica, sans-serif;"&gt;在看了c++ primer &amp;amp; effective c++之后，终于明白:&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: tahoma, arial, helvetica, sans-serif;"&gt;T&amp;amp; operator ++()&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: tahoma, arial, helvetica, sans-serif;"&gt;{&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: tahoma, arial, helvetica, sans-serif;"&gt;　　cout &amp;lt;&amp;lt; "override ++operator" &amp;lt;&amp;lt; endl;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: tahoma, arial, helvetica, sans-serif;"&gt;}&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: tahoma, arial, helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: tahoma, arial, helvetica, sans-serif;"&gt;T&amp;amp; operator++&lt;strong&gt;&lt;span style="color: #ff0000;"&gt;(int)&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: tahoma, arial, helvetica, sans-serif;"&gt;{&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: tahoma, arial, helvetica, sans-serif;"&gt;　　T tmp = *this;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: tahoma, arial, helvetica, sans-serif;"&gt;　　cout &amp;lt;&amp;lt; "override operator++" &amp;lt;&amp;lt; endl;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: tahoma, arial, helvetica, sans-serif;"&gt;　　(*this) += 1;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: tahoma, arial, helvetica, sans-serif;"&gt;　　return tmp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: tahoma, arial, helvetica, sans-serif;"&gt;}&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: tahoma, arial, helvetica, sans-serif;"&gt;注意上面的int参数，在默认情况下，operator++不需传递此参数，即operator++ = operator++(0).&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: tahoma, arial, helvetica, sans-serif;"&gt;但是也确实可以&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: tahoma, arial, helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/SunWentao/aggbug/2198336.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/SunWentao/archive/2011/10/02/2198336.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
