<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type='text/xsl' href='http://ruanqizhen.spaces.live.com/mmm2008-05-17_13.22/rsspretty.aspx?rssquery=en-US;http%3a%2f%2fruanqizhen.spaces.live.com%2fcategory%2f%e8%ae%a1%e7%ae%97%e6%9c%ba%e6%8a%80%e6%9c%af%2ffeed.rss' version='1.0'?><rss version="2.0" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:msn="http://schemas.microsoft.com/msn/spaces/2005/rss" xmlns:live="http://schemas.microsoft.com/live/spaces/2006/rss" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:cf="http://www.microsoft.com/schemas/rss/core/2005" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>LabVIEW: 计算机技术</title><description /><link>http://ruanqizhen.spaces.live.com/?_c11_BlogPart_BlogPart=blogview&amp;_c=BlogPart&amp;partqs=cat%25E8%25AE%25A1%25E7%25AE%2597%25E6%259C%25BA%25E6%258A%2580%25E6%259C%25AF</link><language>en-US</language><pubDate>Wed, 23 Jul 2008 13:45:10 GMT</pubDate><lastBuildDate>Wed, 23 Jul 2008 13:45:10 GMT</lastBuildDate><generator>Microsoft Spaces v1.1</generator><docs>http://www.rssboard.org/rss-specification</docs><ttl>60</ttl><cf:parentRSS>http://ruanqizhen.spaces.live.com/blog/feed.rss</cf:parentRSS><live:type>blogcategory</live:type><live:identity><live:id>6364383383296229302</live:id><live:alias>ruanqizhen</live:alias></live:identity><cf:listinfo><cf:group ns="http://schemas.microsoft.com/live/spaces/2006/rss" element="typelabel" label="Type" /><cf:group ns="http://schemas.microsoft.com/live/spaces/2006/rss" element="tag" label="Tag" /><cf:group element="category" label="Category" /><cf:sort element="pubDate" label="Date" data-type="date" default="true" /><cf:sort element="title" label="Title" data-type="string" /><cf:sort ns="http://purl.org/rss/1.0/modules/slash/" element="comments" label="Comments" data-type="number" /></cf:listinfo><item><title>正常访问Google网页快照的方法</title><link>http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1808.entry</link><description>&lt;div&gt;
&lt;div&gt;
&lt;p&gt;&lt;font color="#993300"&gt;转载的，原文在：&lt;/font&gt;&lt;a href="http://www.williamlong.info/archives/634.html"&gt;http://www.williamlong.info/archives/634.html&lt;/a&gt;&lt;br&gt;&lt;font color="#993300"&gt;真不知道为什么，要把网页快照封掉！&lt;/font&gt;
&lt;hr&gt;

&lt;p&gt;　　目前，Google的网页快照几乎完全无法访问，对Google的使用者来说非常不便，本文将从Google网页快照无法访问的原理出发，逐步分析出一个可以正常访问Google网页快照的方法。
&lt;p&gt;　　根据Google自己的介绍，“Google储存网页的快照，当存有网页的服务器暂时出现故障时仍可浏览该网页的内容”。因此说，网页快照服务器本身出问题的可能性非常小，否则就成笑话了，那么为什么我们都无法访问Google网页快照呢？我们只要分析出不能访问的具体原因，就能知道正常访问 Google网页快照的方法。
&lt;p&gt;　　举个例子分析一下，比如使用Google来搜索“搜索引擎”这个词，可以看到如下图的界面。 
&lt;p&gt;　　这时我们看一下“网页快照”的URL地址，可以发现是下面的地址：
&lt;p&gt;　　http://72.14.235.104/search?q=cache:aPVaeKi1wxcJ:www.baidu.com/+%E6%90%9C%E7%B4%A2%E5%BC%95%E6%93%8E&amp;amp;hl=zh-CN&amp;amp;ct=clnk&amp;amp;cd=1
&lt;p&gt;　　根据我们的测试，72.14.235.104这个IP是可以访问的，完全可以ping通，如下图所示，这说明网页快照服务器本身实际没有任何问题，完全可以直接访问到。 
&lt;p&gt;　　但是我们点击“网页快照”链接后，却出现“该页无法显示”的提示。如下图所示，这显然是关键字过滤的现象。
&lt;p&gt;　　为了分析出具体是什么词语影响，我们还可以在Yahoo下搜索“search?q=cache”这个词，会发现Yahoo也出现了“该页无法显示”的提示。
&lt;p&gt;　　现在，聪明的读者应该已经明白这意味着什么了。既然知道了原因，那么解决方法应该很简单了。就是在search?和q=cache中插入一些字符，将这个词分开即可，就可以让Google的网页快照“恢复正常”。
&lt;p&gt;　　还是上面提到的这个页面的网页快照，我们将“网页快照”的URL地址复制到地址栏，然后将“search?q=cache”中间插入一个“&amp;amp;” 符号，使得该词语变成“search?&amp;amp;q=cache”，这时候按下回车，我们就可以看到了久违了的Google网页快照，如下图所示。
&lt;p&gt;　　当然，这是分析出网页快照无法使用的原理，具体使用中，如果我们每次都这样用快照，那就显得非常麻烦了，如果大家需要频繁使用，建议安装一些&lt;a href="http://www.williamlong.info/archives/252.html"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;浏览器的开发插件&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;，自动将搜索结果中的字符串进行替换，这样就可以完全自动实现Google网页快照的正常浏览访问，关于详细的代码安装和下载，请查看文章《&lt;a href="http://www.williamlong.info/archives/635.html"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;正常访问Google网页快照的插件代码&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;》。
&lt;p&gt; 
&lt;p&gt; &lt;/div&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=6364383383296229302&amp;page=RSS%3a+%e6%ad%a3%e5%b8%b8%e8%ae%bf%e9%97%aeGoogle%e7%bd%91%e9%a1%b5%e5%bf%ab%e7%85%a7%e7%9a%84%e6%96%b9%e6%b3%95&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=ruanqizhen.spaces.live.com&amp;amp;GT1=ruanqizhen"&gt;</description><comments>http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1808.entry#comment</comments><guid isPermaLink="true">http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1808.entry</guid><pubDate>Fri, 22 Sep 2006 09:51:44 GMT</pubDate><slash:comments>3</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://ruanqizhen.spaces.live.com/blog/cns!5852D4F797C53FB6!1808/comments/feed.rss</wfw:commentRss><wfw:comment>http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1808.entry#comment</wfw:comment><dcterms:modified>2006-09-22T09:56:28Z</dcterms:modified></item><item><title>百度也推出 blog 服务了</title><link>http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1504.entry</link><description>&lt;div&gt;LabVIEW 的地址被我给占了 &lt;img src="rte/emoticons/smile_teeth.gif"&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;a href="http://hi.baidu.com/labview/"&gt;http://hi.baidu.com/labview/&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=6364383383296229302&amp;page=RSS%3a+%e7%99%be%e5%ba%a6%e4%b9%9f%e6%8e%a8%e5%87%ba+blog+%e6%9c%8d%e5%8a%a1%e4%ba%86&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=ruanqizhen.spaces.live.com&amp;amp;GT1=ruanqizhen"&gt;</description><comments>http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1504.entry#comment</comments><guid isPermaLink="true">http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1504.entry</guid><pubDate>Sun, 16 Jul 2006 13:05:21 GMT</pubDate><slash:comments>2</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://ruanqizhen.spaces.live.com/blog/cns!5852D4F797C53FB6!1504/comments/feed.rss</wfw:commentRss><wfw:comment>http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1504.entry#comment</wfw:comment><dcterms:modified>2006-07-16T13:05:21Z</dcterms:modified></item><item><title>TIOBE 2006年6月最流行开发语言排名</title><link>http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1465.entry</link><description>&lt;p&gt;    TIOBE 语言排名一个月更新一次。它的统计方法是基于全球有经验的工程师，科目和第三方厂商. 同时也参考来自google,msn,yahoo等搜索引擎计算得出的结果。当然，这个排名并不说明哪个语言绝对最好，但是它可以给你一个参考，当你构建一个新的软件系统时，应该采用什么样的语言。
&lt;p&gt;    LabVIEW 位列第33，差得还很远啊。不过 LabVIEW 去年4月的排名是第39位使用率0.152%，所以还是有了明显进步的。
&lt;p&gt;原文链接： &lt;a href="http://www.tiobe.com/index.htm?tiobe_index"&gt;http://www.tiobe.com/index.htm?tiobe_index&lt;/a&gt;
&lt;p&gt;
&lt;table border=1&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Position&lt;br&gt;June 2006
&lt;th&gt;Position&lt;br&gt;June 2005
&lt;th&gt;Delta&lt;br&gt;in Position
&lt;th&gt;Programming Language
&lt;th&gt;Ratings&lt;br&gt;June 2006
&lt;th&gt;Delta&lt;br&gt;June 2005
&lt;th&gt;Status
&lt;tr height=25&gt;
&lt;td align=middle&gt;1
&lt;td align=middle&gt;2
&lt;td align=middle&gt;&lt;img src="http://www.tiobe.com/tiobe_index/images/Up.gif" border=0&gt; 
&lt;td&gt;Java
&lt;td align=middle&gt;21.128%
&lt;td align=middle&gt;+2.56%
&lt;td align=middle&gt;A
&lt;tr height=25&gt;
&lt;td align=middle&gt;2
&lt;td align=middle&gt;1
&lt;td align=middle&gt;&lt;img src="http://www.tiobe.com/tiobe_index/images/Down.gif" border=0&gt; 
&lt;td&gt;C
&lt;td align=middle&gt;18.253%
&lt;td align=middle&gt;-1.11%
&lt;td align=middle&gt;A
&lt;tr height=25&gt;
&lt;td align=middle&gt;3
&lt;td align=middle&gt;4
&lt;td align=middle&gt;&lt;img src="http://www.tiobe.com/tiobe_index/images/Up.gif" border=0&gt; 
&lt;td&gt;C++
&lt;td align=middle&gt;10.670%
&lt;td align=middle&gt;+0.95%
&lt;td align=middle&gt;A
&lt;tr height=25&gt;
&lt;td align=middle&gt;4
&lt;td align=middle&gt;6
&lt;td align=middle&gt;&lt;img src="http://www.tiobe.com/tiobe_index/images/Up.gif" border=0&gt;&lt;img src="http://www.tiobe.com/tiobe_index/images/Up.gif" border=0&gt; 
&lt;td&gt;(Visual) Basic
&lt;td align=middle&gt;10.185%
&lt;td align=middle&gt;+3.41%
&lt;td align=middle&gt;A
&lt;tr height=25&gt;
&lt;td align=middle&gt;5
&lt;td align=middle&gt;5
&lt;td align=middle&gt;&lt;img src="http://www.tiobe.com/tiobe_index/images/Same.gif" border=0&gt;
&lt;td&gt;PHP
&lt;td align=middle&gt;9.593%
&lt;td align=middle&gt;+1.62%
&lt;td align=middle&gt;A
&lt;tr height=25&gt;
&lt;td align=middle&gt;6
&lt;td align=middle&gt;3
&lt;td align=middle&gt;&lt;img src="http://www.tiobe.com/tiobe_index/images/Down.gif" border=0&gt;&lt;img src="http://www.tiobe.com/tiobe_index/images/Down.gif" border=0&gt;&lt;img src="http://www.tiobe.com/tiobe_index/images/Down.gif" border=0&gt; 
&lt;td&gt;Perl
&lt;td align=middle&gt;6.002%
&lt;td align=middle&gt;-4.37%
&lt;td align=middle&gt;A
&lt;tr height=25&gt;
&lt;td align=middle&gt;7
&lt;td align=middle&gt;8
&lt;td align=middle&gt;&lt;img src="http://www.tiobe.com/tiobe_index/images/Up.gif" border=0&gt; 
&lt;td&gt;Python
&lt;td align=middle&gt;3.464%
&lt;td align=middle&gt;+0.66%
&lt;td align=middle&gt;A
&lt;tr height=25&gt;
&lt;td align=middle&gt;8
&lt;td align=middle&gt;9
&lt;td align=middle&gt;&lt;img src="http://www.tiobe.com/tiobe_index/images/Up.gif" border=0&gt; 
&lt;td&gt;C#
&lt;td align=middle&gt;3.238%
&lt;td align=middle&gt;+0.45%
&lt;td align=middle&gt;A
&lt;tr height=25&gt;
&lt;td align=middle&gt;9
&lt;td align=middle&gt;7
&lt;td align=middle&gt;&lt;img src="http://www.tiobe.com/tiobe_index/images/Down.gif" border=0&gt;&lt;img src="http://www.tiobe.com/tiobe_index/images/Down.gif" border=0&gt; 
&lt;td&gt;Delphi
&lt;td align=middle&gt;2.393%
&lt;td align=middle&gt;-0.50%
&lt;td align=middle&gt;A
&lt;tr height=25&gt;
&lt;td align=middle&gt;10
&lt;td align=middle&gt;10
&lt;td align=middle&gt;&lt;img src="http://www.tiobe.com/tiobe_index/images/Same.gif" border=0&gt; 
&lt;td&gt;JavaScript
&lt;td align=middle&gt;1.456%
&lt;td align=middle&gt;+0.07%
&lt;td align=middle&gt;A
&lt;tr height=25&gt;
&lt;td align=middle&gt;11
&lt;td align=middle&gt;14
&lt;td align=middle&gt;&lt;img src="http://www.tiobe.com/tiobe_index/images/Up.gif" border=0&gt;&lt;img src="http://www.tiobe.com/tiobe_index/images/Up.gif" border=0&gt;&lt;img src="http://www.tiobe.com/tiobe_index/images/Up.gif" border=0&gt; 
&lt;td&gt;SAS
&lt;td align=middle&gt;1.373%
&lt;td align=middle&gt;+0.28%
&lt;td align=middle&gt;A
&lt;tr height=25&gt;
&lt;td align=middle&gt;12
&lt;td align=middle&gt;24
&lt;td align=middle&gt;&lt;strong&gt;12 * &lt;/strong&gt;&lt;img src="http://www.tiobe.com/tiobe_index/images/Up.gif" border=0&gt; 
&lt;td&gt;Visual FoxPro
&lt;td align=middle&gt;1.036%
&lt;td align=middle&gt;+0.66%
&lt;td align=middle&gt;A
&lt;tr height=25&gt;
&lt;td align=middle&gt;13
&lt;td align=middle&gt;11
&lt;td align=middle&gt;&lt;img src="http://www.tiobe.com/tiobe_index/images/Down.gif" border=0&gt;&lt;img src="http://www.tiobe.com/tiobe_index/images/Down.gif" border=0&gt; 
&lt;td&gt;PL/SQL
&lt;td align=middle&gt;0.959%
&lt;td align=middle&gt;-0.37%
&lt;td align=middle&gt;A
&lt;tr height=25&gt;
&lt;td align=middle&gt;14
&lt;td align=middle&gt;12
&lt;td align=middle&gt;&lt;img src="http://www.tiobe.com/tiobe_index/images/Down.gif" border=0&gt;&lt;img src="http://www.tiobe.com/tiobe_index/images/Down.gif" border=0&gt; 
&lt;td&gt;COBOL
&lt;td align=middle&gt;0.650%
&lt;td align=middle&gt;-0.73%
&lt;td align=middle&gt;B
&lt;tr height=25&gt;
&lt;td align=middle&gt;15
&lt;td align=middle&gt;15
&lt;td align=middle&gt;&lt;img src="http://www.tiobe.com/tiobe_index/images/Same.gif" border=0&gt;
&lt;td&gt;Lisp/Scheme
&lt;td align=middle&gt;0.644%
&lt;td align=middle&gt;-0.22%
&lt;td align=middle&gt;A--
&lt;tr height=25&gt;
&lt;td align=middle&gt;16
&lt;td align=middle&gt;18
&lt;td align=middle&gt;&lt;img src="http://www.tiobe.com/tiobe_index/images/Up.gif" border=0&gt;&lt;img src="http://www.tiobe.com/tiobe_index/images/Up.gif" border=0&gt; 
&lt;td&gt;Ada
&lt;td align=middle&gt;0.536%
&lt;td align=middle&gt;-0.14%
&lt;td align=middle&gt;B
&lt;tr height=25&gt;
&lt;td align=middle&gt;17
&lt;td align=middle&gt;19
&lt;td align=middle&gt;&lt;img src="http://www.tiobe.com/tiobe_index/images/Up.gif" border=0&gt;&lt;img src="http://www.tiobe.com/tiobe_index/images/Up.gif" border=0&gt; 
&lt;td&gt;Pascal
&lt;td align=middle&gt;0.486%
&lt;td align=middle&gt;+0.00%
&lt;td align=middle&gt;B
&lt;tr height=25&gt;
&lt;td align=middle&gt;18
&lt;td align=middle&gt;26
&lt;td align=middle&gt;&lt;strong&gt;8 * &lt;/strong&gt;&lt;img src="http://www.tiobe.com/tiobe_index/images/Up.gif" border=0&gt; 
&lt;td&gt;D
&lt;td align=middle&gt;0.485%
&lt;td align=middle&gt;+0.13%
&lt;td align=middle&gt;B
&lt;tr height=25&gt;
&lt;td align=middle&gt;19
&lt;td align=middle&gt;23
&lt;td align=middle&gt;&lt;img src="http://www.tiobe.com/tiobe_index/images/Up.gif" border=0&gt;&lt;img src="http://www.tiobe.com/tiobe_index/images/Up.gif" border=0&gt;&lt;img src="http://www.tiobe.com/tiobe_index/images/Up.gif" border=0&gt;&lt;img src="http://www.tiobe.com/tiobe_index/images/Up.gif" border=0&gt; 
&lt;td&gt;Ruby
&lt;td align=middle&gt;0.479%
&lt;td align=middle&gt;+0.10%
&lt;td align=middle&gt;B
&lt;tr height=25&gt;
&lt;td align=middle&gt;20
&lt;td align=middle&gt;31
&lt;td align=middle&gt;&lt;strong&gt;11 * &lt;/strong&gt;&lt;img src="http://www.tiobe.com/tiobe_index/images/Up.gif" border=0&gt; 
&lt;td&gt;ColdFusion
&lt;td align=middle&gt;0.453%
&lt;td align=middle&gt;+0.18%
&lt;td align=middle&gt;B&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt; 
&lt;h3&gt;其它语言：&lt;br&gt;
&lt;table border=1&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Position
&lt;th&gt;Programming Language
&lt;th&gt;Ratings
&lt;tr height=25&gt;
&lt;td&gt;21
&lt;td&gt;VB.NET
&lt;td&gt;0.442%
&lt;tr height=25&gt;
&lt;td&gt;22
&lt;td&gt;ABAP
&lt;td&gt;0.435%
&lt;tr height=25&gt;
&lt;td&gt;23
&lt;td&gt;Fortran
&lt;td&gt;0.431%
&lt;tr height=25&gt;
&lt;td&gt;24
&lt;td&gt;dBASE
&lt;td&gt;0.414%
&lt;tr height=25&gt;
&lt;td&gt;25
&lt;td&gt;Awk
&lt;td&gt;0.363%
&lt;tr height=25&gt;
&lt;td&gt;26
&lt;td&gt;IDL
&lt;td&gt;0.344%
&lt;tr height=25&gt;
&lt;td&gt;27
&lt;td&gt;MATLAB
&lt;td&gt;0.328%
&lt;tr height=25&gt;
&lt;td&gt;28
&lt;td&gt;Prolog
&lt;td&gt;0.305%
&lt;tr height=25&gt;
&lt;td&gt;29
&lt;td&gt;T-SQL
&lt;td&gt;0.288%
&lt;tr height=25&gt;
&lt;td&gt;30
&lt;td&gt;Bash
&lt;td&gt;0.288%
&lt;tr height=25&gt;
&lt;td&gt;31
&lt;td&gt;ActionScript
&lt;td&gt;0.246%
&lt;tr height=25&gt;
&lt;td&gt;32
&lt;td&gt;Logo
&lt;td&gt;0.233%
&lt;tr bgcolor="#99cccc" height=25&gt;
&lt;td&gt;&lt;strong&gt;&lt;font color="#000000"&gt;33&lt;/font&gt;&lt;/strong&gt;
&lt;td&gt;&lt;strong&gt;&lt;font color="#000000"&gt;LabView&lt;/font&gt;&lt;/strong&gt;
&lt;td&gt;&lt;strong&gt;&lt;font color="#000000"&gt;0.184%&lt;/font&gt;&lt;/strong&gt;
&lt;tr height=25&gt;
&lt;td&gt;34
&lt;td&gt;RPG
&lt;td&gt;0.172%
&lt;tr height=25&gt;
&lt;td&gt;35
&lt;td&gt;S-Lang
&lt;td&gt;0.168%
&lt;tr height=25&gt;
&lt;td&gt;36
&lt;td&gt;CL
&lt;td&gt;0.163%
&lt;tr height=25&gt;
&lt;td&gt;37
&lt;td&gt;REXX
&lt;td&gt;0.158%
&lt;tr height=25&gt;
&lt;td&gt;38
&lt;td&gt;Forth
&lt;td&gt;0.141%
&lt;tr height=25&gt;
&lt;td&gt;39
&lt;td&gt;Icon
&lt;td&gt;0.134%
&lt;tr height=25&gt;
&lt;td&gt;40
&lt;td&gt;Smalltalk
&lt;td&gt;0.133%
&lt;tr height=25&gt;
&lt;td&gt;41
&lt;td&gt;Tcl/Tk
&lt;td&gt;0.132%
&lt;tr height=25&gt;
&lt;td&gt;42
&lt;td&gt;VBScript
&lt;td&gt;0.109%
&lt;tr height=25&gt;
&lt;td&gt;43
&lt;td&gt;csh
&lt;td&gt;0.097%
&lt;tr height=25&gt;
&lt;td&gt;44
&lt;td&gt;Postscript
&lt;td&gt;0.096%
&lt;tr height=25&gt;
&lt;td&gt;45
&lt;td&gt;Lingo
&lt;td&gt;0.091%
&lt;tr height=25&gt;
&lt;td&gt;46
&lt;td&gt;OCaml
&lt;td&gt;0.090%
&lt;tr height=25&gt;
&lt;td&gt;47
&lt;td&gt;ML
&lt;td&gt;0.087%
&lt;tr height=25&gt;
&lt;td&gt;48
&lt;td&gt;Objective-C
&lt;td&gt;0.087%
&lt;tr height=25&gt;
&lt;td&gt;49
&lt;td&gt;Bourne Shell
&lt;td&gt;0.085%
&lt;tr height=25&gt;
&lt;td&gt;50
&lt;td&gt;Maple
&lt;td&gt;0.077%&lt;/tbody&gt;&lt;/table&gt;&lt;/h3&gt;
&lt;h3&gt; &lt;/h3&gt;
&lt;h3&gt;接下50 种语言：&lt;/h3&gt;ABC, Alpha, APL, AppleScript, Beta, Boo, cg, Ch, Clean, Clipper, cT, Curl, dc, Dylan, Eiffel, Erlang, Euphoria, Felix, Haskell, Inform, Io, J#, Limbo, LotusScript, Lua, MAD, Magic, Mathematica, Modula-2, Moto, MUMPS, Natural, Oberon, Occam, OPL, Oz, Pike, PILOT, PL/1, Powerbuilder, Progress, Q, REALBasic, Scala, SIGNAL, Simula, VHDL, XSLT, and Yorick.&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=6364383383296229302&amp;page=RSS%3a+TIOBE+2006%e5%b9%b46%e6%9c%88%e6%9c%80%e6%b5%81%e8%a1%8c%e5%bc%80%e5%8f%91%e8%af%ad%e8%a8%80%e6%8e%92%e5%90%8d&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=ruanqizhen.spaces.live.com&amp;amp;GT1=ruanqizhen"&gt;</description><comments>http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1465.entry#comment</comments><guid isPermaLink="true">http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1465.entry</guid><pubDate>Tue, 27 Jun 2006 09:14:01 GMT</pubDate><slash:comments>4</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://ruanqizhen.spaces.live.com/blog/cns!5852D4F797C53FB6!1465/comments/feed.rss</wfw:commentRss><wfw:comment>http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1465.entry#comment</wfw:comment><dcterms:modified>2006-07-03T02:11:51Z</dcterms:modified></item><item><title>打开 hotmail 信件的方法</title><link>http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1296.entry</link><description>&lt;div&gt; &lt;/div&gt;
&lt;div&gt;最近 有些地方无法打开 hotmail，我们公司就不行。&lt;/div&gt;
&lt;div&gt;据说是因为什么原因政府把 homail 封了。&lt;/div&gt;
&lt;div&gt;但是从同事那里得到一个看 hotmail 新的方法。&lt;/div&gt;
&lt;div&gt;登入这个网址&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;a href="http://mobile.msn.com/hm/folder.aspx"&gt;http://mobile.msn.com/hm/folder.aspx&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;这似乎是专门为手机用的，所以效果差了点，也看不到附件。&lt;/div&gt;
&lt;div&gt;总比什么都看不到强一点吧 :)&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=6364383383296229302&amp;page=RSS%3a+%e6%89%93%e5%bc%80+hotmail+%e4%bf%a1%e4%bb%b6%e7%9a%84%e6%96%b9%e6%b3%95&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=ruanqizhen.spaces.live.com&amp;amp;GT1=ruanqizhen"&gt;</description><comments>http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1296.entry#comment</comments><guid isPermaLink="true">http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1296.entry</guid><pubDate>Fri, 12 May 2006 01:24:39 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://ruanqizhen.spaces.live.com/blog/cns!5852D4F797C53FB6!1296/comments/feed.rss</wfw:commentRss><wfw:comment>http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1296.entry#comment</wfw:comment><dcterms:modified>2006-05-12T01:24:39Z</dcterms:modified></item><item><title>抢先试用新 Google 界面！</title><link>http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1255.entry</link><description>&lt;div&gt;&lt;span&gt; 首先在 &lt;a href="http://www.google.com/"&gt;&lt;u&gt;&lt;font color="#800080"&gt;http://www.google.com&lt;/font&gt;&lt;/u&gt;&lt;/a&gt; 里随便搜索一个词, 然后将下方代码复制到地址栏, 代替原来的地址, 然后按回车 (注意, 下面的代码只有一行, 并没有换行, 换行不会成功)&lt;br&gt;&lt;br&gt;javascript:alert(document.cookie=&amp;quot;PREF=ID=fb7740f107311e46:TM=1142683332:LM=1142683332:S=fNSw6ljXTzvL3dWu;path=/;domain=.&amp;quot;+location.href.split('/')[2].substr(location.href.split('/')[2].indexOf('google')));&lt;br&gt;&lt;br&gt;这时会弹出一个对话框, 点击确认。&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt; 
&lt;p&gt;&lt;span&gt;重新进入 google，你就能看见新版的 Google 搜索界面了 :)&lt;/span&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=6364383383296229302&amp;page=RSS%3a+%e6%8a%a2%e5%85%88%e8%af%95%e7%94%a8%e6%96%b0+Google+%e7%95%8c%e9%9d%a2%ef%bc%81&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=ruanqizhen.spaces.live.com&amp;amp;GT1=ruanqizhen"&gt;</description><comments>http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1255.entry#comment</comments><guid isPermaLink="true">http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1255.entry</guid><pubDate>Thu, 30 Mar 2006 00:26:58 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://ruanqizhen.spaces.live.com/blog/cns!5852D4F797C53FB6!1255/comments/feed.rss</wfw:commentRss><wfw:comment>http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1255.entry#comment</wfw:comment><dcterms:modified>2006-03-30T00:26:58Z</dcterms:modified></item><item><title>申请开通了一个 Google Page :)</title><link>http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1247.entry</link><description>&lt;div&gt;&lt;a href="http://ruanqizhen.googlepages.com/"&gt;http://ruanqizhen.googlepages.com/&lt;/a&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=6364383383296229302&amp;page=RSS%3a+%e7%94%b3%e8%af%b7%e5%bc%80%e9%80%9a%e4%ba%86%e4%b8%80%e4%b8%aa+Google+Page+%3a)&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=ruanqizhen.spaces.live.com&amp;amp;GT1=ruanqizhen"&gt;</description><comments>http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1247.entry#comment</comments><guid isPermaLink="true">http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1247.entry</guid><pubDate>Thu, 23 Mar 2006 17:14:40 GMT</pubDate><slash:comments>2</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://ruanqizhen.spaces.live.com/blog/cns!5852D4F797C53FB6!1247/comments/feed.rss</wfw:commentRss><wfw:comment>http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1247.entry#comment</wfw:comment><dcterms:modified>2006-03-23T17:14:40Z</dcterms:modified></item><item><title>Google 推出个人主页服务</title><link>http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1238.entry</link><description>&lt;p&gt;我觉得主页到底是比 blog 维护起来要麻烦了些。恐怕不是 MSN Space 的对手。 
&lt;p&gt;我的 Google Page：&lt;a href="http://ruanqizhen.googlepages.com/"&gt;http://ruanqizhen.googlepages.com/&lt;/a&gt;
&lt;p&gt;  
&lt;p&gt;Quote  &lt;a href="http://spaces.msn.com/gene7299/blog/cns!D2C6AE79F031F1AC!49334.entry"&gt;Google推出線上網頁製作工具&lt;/a&gt;&lt;br&gt;
&lt;p&gt;&lt;font face="Lucida Handwriting, Cursive"&gt;&lt;img src="http://pages.google.com/-/images/logo.gif" align=left&gt;G&lt;/font&gt;&lt;font face="Verdana, Geneva, Arial, Sans-serif"&gt;oogle在23日推出一款免費的線上網頁製作工具，透過此工具可以在幾分鐘之內製作出自己的網頁，Google將此工具命名為「&lt;/font&gt;&lt;a href="http://pages.google.com/"&gt;&lt;u&gt;&lt;font face="Verdana, Geneva, Arial, Sans-serif"&gt;Google Page Creator&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;font face="Verdana, Geneva, Arial, Sans-serif"&gt;」， Google Page Creator 是應用&lt;/font&gt;&lt;a href="http://zh.wikipedia.org/w/index.php?title=AJAX&amp;amp;variant=zh-tw"&gt;&lt;u&gt;&lt;font face="Verdana, Geneva, Arial, Sans-serif"&gt;AJAX&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;font face="Verdana, Geneva, Arial, Sans-serif"&gt;技術的編輯器讓使用著能用WYSIWYG(所見即所得)的方式輕鬆建立網頁。這無疑又是一項創新，自Google走紅以來已經發佈多款創新網路服務，大概是希望把網路服務發揮到極致吧。 &lt;/font&gt;
&lt;p&gt;&lt;font face="Verdana, Geneva, Arial, Sans-serif"&gt;　&lt;img src="http://gene7299.googlepages.com/google_pc.jpg"&gt;&lt;/font&gt;
&lt;p align=center&gt;&lt;a href="http://pages.google.com/"&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif" size=4&gt;&lt;u&gt;http://pages.google.com&lt;/u&gt;&lt;/font&gt;&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;font face="Verdana, Geneva, Arial, Sans-serif"&gt;免費提供100MB的空間使用.. &lt;br&gt;　　&lt;/font&gt; 
&lt;li&gt;&lt;font face="Verdana, Geneva, Arial, Sans-serif"&gt;不能貼&amp;lt;embed&amp;gt;語法，就算是貼上自家的&lt;/font&gt;&lt;a href="http://video.google.com/"&gt;&lt;u&gt;&lt;font face="Verdana, Geneva, Arial, Sans-serif" color="#0000ff"&gt;Google Video&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;font face="Verdana, Geneva, Arial, Sans-serif"&gt;也不行  &lt;br&gt;　　&lt;/font&gt; 
&lt;li&gt;&lt;font face="Verdana, Geneva, Arial, Sans-serif"&gt;可以上傳任何檔案 &lt;br&gt;　　&lt;/font&gt; 
&lt;li&gt;&lt;font face="Verdana, Geneva, Arial, Sans-serif"&gt;有多種佈景主題和版面可以選擇&lt;br&gt;　　&lt;/font&gt; 
&lt;li&gt;&lt;font face="Verdana, Geneva, Arial, Sans-serif"&gt;可以使用HTML編輯部分網頁&lt;br&gt;     &lt;/font&gt;
&lt;li&gt;&lt;font face="Verdana, Geneva, Arial, Sans-serif"&gt;GET timeout = 1 min &lt;br&gt;&lt;font style="background-color:#ffffff" color="#ff6600"&gt;(也就是一分鐘之內還沒下載完檔案會自動斷線,所以別想在這放置大型檔案或MP3囉)&lt;br&gt;&lt;/font&gt;   &lt;/font&gt;
&lt;li&gt;&lt;font face="Verdana, Geneva, Arial, Sans-serif"&gt;只要有 GMail 帳號 ，就可直接使用。&lt;br&gt;　&lt;br&gt;　＊如何得到GMail邀請函,請上搜尋引擎看看有誰分享,向他要一個吧..&lt;a href="http://www.google.com.tw/search?hl=zh-TW&amp;amp;q=gmail+%E9%82%80%E8%AB%8B&amp;amp;btnG=%E6%90%9C%E5%B0%8B&amp;amp;meta="&gt;&lt;u&gt;CLICK&lt;/u&gt;&lt;/a&gt;&lt;br&gt;不過這還不行,目前Google已經有限額使用此服務,所以有興趣的人要在網頁右下方的框框填上自己的Email,預定名額...&lt;br&gt;&lt;img src="http://gene7299.googlepages.com/webman001.PNG"&gt;&lt;br&gt;　　　&lt;/font&gt;&lt;/ul&gt;
&lt;p&gt;
&lt;p&gt;&lt;br&gt;  &lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=6364383383296229302&amp;page=RSS%3a+Google+%e6%8e%a8%e5%87%ba%e4%b8%aa%e4%ba%ba%e4%b8%bb%e9%a1%b5%e6%9c%8d%e5%8a%a1&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=ruanqizhen.spaces.live.com&amp;amp;GT1=ruanqizhen"&gt;</description><comments>http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1238.entry#comment</comments><guid isPermaLink="true">http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1238.entry</guid><pubDate>Fri, 17 Mar 2006 02:47:30 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://ruanqizhen.spaces.live.com/blog/cns!5852D4F797C53FB6!1238/comments/feed.rss</wfw:commentRss><wfw:comment>http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1238.entry#comment</wfw:comment><dcterms:modified>2006-03-23T17:15:48Z</dcterms:modified></item><item><title>VC中的字节对齐</title><link>http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1214.entry</link><description>&lt;div&gt; &lt;br&gt;    当在C中定义了一个结构类型时，它的大小是否等于各字段(field)大小之和？编译器将如何在内存中放置这些字段？ANSI C对结构体的内存布局有什么要求？而我们的程序又能否依赖这种布局？这些问题或许对不少朋友来说还有点模糊，那么本文就试着探究它们背后的秘密。&lt;/div&gt;
&lt;div&gt;    首先，至少有一点可以肯定，那就是ANSI C保证结构体中各字段在内存中出现的位置是随它们的声明顺序依次递增的，并且第一个字段的首地址等于整个结构体实例的首地址。比如有这样一个结构体：&lt;br&gt;  &lt;br&gt;  struct vector{int x,y,z;} s;&lt;br&gt;  int *p,*q,*r;&lt;br&gt;  struct vector *ps;&lt;br&gt;  &lt;br&gt;  p = &amp;amp;s.x;&lt;br&gt;  q = &amp;amp;s.y;&lt;br&gt;  r = &amp;amp;s.z;&lt;br&gt;  ps = &amp;amp;s;&lt;/div&gt;
&lt;div&gt;  assert(p &amp;lt; q);&lt;br&gt;  assert(p &amp;lt; r);&lt;br&gt;  assert(q &amp;lt; r);&lt;br&gt;  assert((int*)ps == p);&lt;br&gt;  // 上述断言一定不会失败&lt;/div&gt;
&lt;div&gt;    这时，有朋友可能会问:&amp;quot;标准是否规定相邻字段在内存中也相邻?&amp;quot;。 唔，对不起，ANSI C没有做出保证，你的程序在任何时候都不应该依赖这个假设。那这是否意味着我们永远无法勾勒出一幅更清晰更精确的结构体内存布局图？哦，当然不是。不过先让我们从这个问题中暂时抽身，关注一下另一个重要问题————内存对齐。&lt;/div&gt;
&lt;div&gt;    许多实际的计算机系统对基本类型数据在内存中存放的位置有限制，它们会要求这些数据的首地址的值是某个数k(通常它为4或8)的倍数，这就是所谓的内存对齐，而这个k则被称为该数据类型的对齐模数(alignment modulus)。当一种类型S的对齐模数与另一种类型T的对齐模数的比值是大于1的整数，我们就称类型S的对齐要求比T强(严格)，而称T比S弱(宽松)。这种强制的要求一来简化了处理器与内存之间传输系统的设计，二来可以提升读取数据的速度。比如这么一种处理器，它每次读写内存的时候都从某个8倍数的地址开始，一次读出或写入8个字节的数据，假如软件能保证double类型的数据都从8倍数地址开始，那么读或写一个double类型数据就只需要一次内存操作。否则，我们就可能需要两次内存操作才能完成这个动作，因为数据或许恰好横跨在两个符合对齐要求的8字节内存块上。某些处理器在数据不满足对齐要求的情况下可能会出错，但是Intel的IA32架构的处理器则不管数据是否对齐都能正确工作。不过Intel奉劝大家，如果想提升性能，那么所有的程序数据都应该尽可能地对齐。Win32平台下的微软C编译器(cl.exe for 80x86)在默认情况下采用如下的对齐规则: 任何基本数据类型T的对齐模数就是T的大小，即sizeof(T)。比如对于double类型(8字节)，就要求该类型数据的地址总是8的倍数，而char类型数据(1字节)则可以从任何一个地址开始。Linux下的GCC奉行的是另外一套规则(在资料中查得，并未验证，如错误请指正):任何2字节大小(包括单字节吗?)的数据类型(比如short)的对齐模数是2，而其它所有超过2字节的数据类型(比如long,double)都以4为对齐模数。&lt;/div&gt;
&lt;div&gt;    现在回到我们关心的struct上来。ANSI C规定一种结构类型的大小是它所有字段的大小以及字段之间或字段尾部的填充区大小之和。嗯？填充区？对，这就是为了使结构体字段满足内存对齐要求而额外分配给结构体的空间。那么结构体本身有什么对齐要求吗？有的，ANSI C标准规定结构体类型的对齐要求不能比它所有字段中要求最严格的那个宽松，可以更严格(但此非强制要求，VC7.1就仅仅是让它们一样严格)。我们来看一个例子(以下所有试验的环境是Intel Celeron 2.4G + WIN2000 PRO + vc7.1，内存对齐编译选项是&amp;quot;默认&amp;quot;，即不指定/Zp与/pack选项):&lt;/div&gt;
&lt;div&gt;  typedef struct ms1&lt;br&gt;  {&lt;br&gt;     char a;&lt;br&gt;     int b;&lt;br&gt;  } MS1;&lt;/div&gt;
&lt;div&gt;    假设MS1按如下方式内存布局(本文所有示意图中的内存地址从左至右递增):&lt;br&gt;       _____________________________&lt;br&gt;       |       |                   |&lt;br&gt;       |   a   |        b          |&lt;br&gt;       |       |                   |&lt;br&gt;       +---------------------------+&lt;br&gt; Bytes:    1             4&lt;/div&gt;
&lt;div&gt;    因为MS1中有最强对齐要求的是b字段(int)，所以根据编译器的对齐规则以及ANSI C标准，MS1对象的首地址一定是4(int类型的对齐模数)的倍数。那么上述内存布局中的b字段能满足int类型的对齐要求吗？嗯，当然不能。如果你是编译器，你会如何巧妙安排来满足CPU的癖好呢？呵呵，经过1毫秒的艰苦思考，你一定得出了如下的方案：&lt;/div&gt;
&lt;div&gt;       _______________________________________&lt;br&gt;       |       |\\\\\\\\\\\|                 |&lt;br&gt;       |   a   |\\padding\\|       b         |&lt;br&gt;       |       |\\\\\\\\\\\|                 |&lt;br&gt;       +-------------------------------------+&lt;br&gt; Bytes:    1         3             4&lt;/div&gt;
&lt;div&gt;    这个方案在a与b之间多分配了3个填充(padding)字节，这样当整个struct对象首地址满足4字节的对齐要求时，b字段也一定能满足int型的4字节对齐规定。那么sizeof(MS1)显然就应该是8，而b字段相对于结构体首地址的偏移就是4。非常好理解，对吗？现在我们把MS1中的字段交换一下顺序:&lt;/div&gt;
&lt;div&gt;  typedef struct ms2&lt;br&gt;  {&lt;br&gt;     int a;&lt;br&gt;     char b;&lt;br&gt;  } MS2;&lt;/div&gt;
&lt;div&gt;    或许你认为MS2比MS1的情况要简单，它的布局应该就是&lt;/div&gt;
&lt;div&gt;       _______________________&lt;br&gt;       |             |       |&lt;br&gt;       |     a       |   b   |&lt;br&gt;       |             |       |&lt;br&gt;       +---------------------+&lt;br&gt; Bytes:      4           1 &lt;/div&gt;
&lt;div&gt;    因为MS2对象同样要满足4字节对齐规定，而此时a的地址与结构体的首地址相等，所以它一定也是4字节对齐。嗯，分析得有道理，可是却不全面。让我们来考虑一下定义一个MS2类型的数组会出现什么问题。C标准保证，任何类型(包括自定义结构类型)的数组所占空间的大小一定等于一个单独的该类型数据的大小乘以数组元素的个数。换句话说，数组各元素之间不会有空隙。按照上面的方案，一个MS2数组array的布局就是:&lt;/div&gt;
&lt;div&gt;|&amp;lt;-    array[1]     -&amp;gt;|&amp;lt;-    array[2]     -&amp;gt;|&amp;lt;- array[3] .....&lt;/div&gt;
&lt;div&gt;__________________________________________________________&lt;br&gt;|             |       |              |      |&lt;br&gt;|     a       |   b   |      a       |   b  |.............&lt;br&gt;|             |       |              |      |&lt;br&gt;+----------------------------------------------------------&lt;br&gt;Bytes:  4         1          4           1&lt;/div&gt;
&lt;div&gt;    当数组首地址是4字节对齐时，array[1].a也是4字节对齐，可是array[2].a呢？array[3].a ....呢？可见这种方案在定义结构体数组时无法让数组中所有元素的字段都满足对齐规定，必须修改成如下形式:&lt;/div&gt;
&lt;div&gt;       ___________________________________&lt;br&gt;       |             |       |\\\\\\\\\\\|&lt;br&gt;       |     a       |   b   |\\padding\\|&lt;br&gt;       |             |       |\\\\\\\\\\\|&lt;br&gt;       +---------------------------------+&lt;br&gt; Bytes:      4           1         3&lt;/div&gt;
&lt;div&gt;    现在无论是定义一个单独的MS2变量还是MS2数组，均能保证所有元素的所有字段都满足对齐规定。那么sizeof(MS2)仍然是8，而a的偏移为0，b的偏移是4。&lt;/div&gt;
&lt;div&gt;    好的，现在你已经掌握了结构体内存布局的基本准则，尝试分析一个稍微复杂点的类型吧。&lt;/div&gt;
&lt;div&gt;  typedef struct ms3&lt;br&gt;  {&lt;br&gt;     char a;&lt;br&gt;     short b;&lt;br&gt;     double c;&lt;br&gt;  } MS3;&lt;/div&gt;
&lt;div&gt;    我想你一定能得出如下正确的布局图:&lt;br&gt;         &lt;br&gt;        padding  &lt;br&gt;           |&lt;br&gt;      _____v_________________________________&lt;br&gt;      |   |\|     |\\\\\\\\\|               |&lt;br&gt;      | a |\|  b  |\padding\|       c       |&lt;br&gt;      |   |\|     |\\\\\\\\\|               |&lt;br&gt;      +-------------------------------------+&lt;br&gt;Bytes:  1  1   2       4            8&lt;br&gt;           &lt;br&gt;    sizeof(short)等于2，b字段应从偶数地址开始，所以a的后面填充一个字节，而sizeof(double)等于8，c字段要从8倍数地址开始，前面的a、b字段加上填充字节已经有4 bytes，所以b后面再填充4个字节就可以保证c字段的对齐要求了。sizeof(MS3)等于16，b的偏移是2，c的偏移是8。接着看看结构体中字段还是结构类型的情况:&lt;/div&gt;
&lt;div&gt;  typedef struct ms4&lt;br&gt;  {&lt;br&gt;     char a;&lt;br&gt;     MS3 b;&lt;br&gt;  } MS4;&lt;/div&gt;
&lt;div&gt;    MS3中内存要求最严格的字段是c，那么MS3类型数据的对齐模数就与double的一致(为8)，a字段后面应填充7个字节，因此MS4的布局应该是:&lt;br&gt;       _______________________________________&lt;br&gt;       |       |\\\\\\\\\\\|                 |&lt;br&gt;       |   a   |\\padding\\|       b         |&lt;br&gt;       |       |\\\\\\\\\\\|                 |&lt;br&gt;       +-------------------------------------+&lt;br&gt; Bytes:    1         7             16&lt;/div&gt;
&lt;div&gt;    显然，sizeof(MS4)等于24，b的偏移等于8。&lt;/div&gt;
&lt;div&gt;    在实际开发中，我们可以通过指定/Zp编译选项来更改编译器的对齐规则。比如指定/Zpn(VC7.1中n可以是1、2、4、8、16)就是告诉编译器最大对齐模数是n。在这种情况下，所有小于等于n字节的基本数据类型的对齐规则与默认的一样，但是大于n个字节的数据类型的对齐模数被限制为n。事实上，VC7.1的默认对齐选项就相当于/Zp8。仔细看看MSDN对这个选项的描述，会发现它郑重告诫了程序员不要在MIPS和Alpha平台上用/Zp1和/Zp2选项，也不要在16位平台上指定/Zp4和/Zp8(想想为什么？)。改变编译器的对齐选项，对照程序运行结果重新分析上面4种结构体的内存布局将是一个很好的复习。&lt;/div&gt;
&lt;div&gt;    到了这里，我们可以回答本文提出的最后一个问题了。结构体的内存布局依赖于CPU、操作系统、编译器及编译时的对齐选项，而你的程序可能需要运行在多种平台上，你的源代码可能要被不同的人用不同的编译器编译(试想你为别人提供一个开放源码的库)，那么除非绝对必需，否则你的程序永远也不要依赖这些诡异的内存布局。顺便说一下，如果一个程序中的两个模块是用不同的对齐选项分别编译的，那么它很可能会产生一些非常微妙的错误。如果你的程序确实有很难理解的行为，不防仔细检查一下各个模块的编译选项。&lt;/div&gt;
&lt;div&gt;    思考题:请分析下面几种结构体在你的平台上的内存布局，并试着寻找一种合理安排字段声明顺序的方法以尽量节省内存空间。&lt;/div&gt;
&lt;div&gt;    A. struct P1 { int a; char b; int c; char d; };&lt;br&gt;    B. struct P2 { int a; char b; char c; int d; };&lt;br&gt;    C. struct P3 { short a[3]; char b[3]; };&lt;br&gt;    D. struct P4 { short a[3]; char *b[3]; };&lt;br&gt;    E. struct P5 { struct P2 *a; char b; struct P1 a[2];  };&lt;/div&gt;
&lt;div&gt; &lt;br&gt; &lt;br&gt; 1、 sizeof应用在结构上的情况&lt;/div&gt;
&lt;div&gt;请看下面的结构：&lt;/div&gt;
&lt;div&gt;struct MyStruct&lt;/div&gt;
&lt;div&gt;{&lt;/div&gt;
&lt;div&gt;double dda1;&lt;/div&gt;
&lt;div&gt;char dda;&lt;/div&gt;
&lt;div&gt;int type&lt;/div&gt;
&lt;div&gt;};&lt;/div&gt;
&lt;div&gt;对结构MyStruct采用sizeof会出现什么结果呢？sizeof(MyStruct)为多少呢？也许你会这样求：&lt;/div&gt;
&lt;div&gt;sizeof(MyStruct)=sizeof(double)+sizeof(char)+sizeof(int)=13&lt;/div&gt;
&lt;div&gt;但是当在VC中测试上面结构的大小时，你会发现sizeof(MyStruct)为16。你知道为什么在VC中会得出这样一个结果吗？&lt;/div&gt;
&lt;div&gt;其实，这是VC对变量存储的一个特殊处理。为了提高CPU的存储速度，VC对一些变量的起始地址做了“对齐”处理。在默认情况下，VC规定各成员变量存放的起始地址相对于结构的起始地址的偏移量必须为该变量的类型所占用的字节数的倍数。下面列出常用类型的对齐方式(vc6.0,32位系统)。&lt;/div&gt;
&lt;div&gt;类型&lt;br&gt;对齐方式（变量存放的起始地址相对于结构的起始地址的偏移量）&lt;/div&gt;
&lt;div&gt;Char：偏移量必须为sizeof(char)即1的倍数；&lt;br&gt;int：偏移量必须为sizeof(int)即4的倍数；&lt;br&gt;float：偏移量必须为sizeof(float)即4的倍数；&lt;br&gt;double：偏移量必须为sizeof(double)即8的倍数；&lt;br&gt;Short：偏移量必须为sizeof(short)即2的倍数。&lt;/div&gt;
&lt;div&gt;各成员变量在存放的时候根据在结构中出现的顺序依次申请空间，同时按照上面的对齐方式调整位置，空缺的字节VC会自动填充。同时VC为了确保结构的大小为结构的字节边界数（即该结构中占用最大空间的类型所占用的字节数）的倍数，所以在为最后一个成员变量申请空间后，还会根据需要自动填充空缺的字节。&lt;/div&gt;
&lt;div&gt;下面用前面的例子来说明VC到底怎么样来存放结构的。&lt;/div&gt;
&lt;div&gt;struct MyStruct &lt;/div&gt;
&lt;div&gt;{&lt;/div&gt;
&lt;div&gt;double dda1; &lt;/div&gt;
&lt;div&gt;char dda;&lt;/div&gt;
&lt;div&gt;int type&lt;/div&gt;
&lt;div&gt;}；&lt;/div&gt;
&lt;div&gt;为上面的结构分配空间的时候，VC根据成员变量出现的顺序和对齐方式，先为第一个成员dda1分配空间，其起始地址跟结构的起始地址相同（刚好偏移量0刚好为sizeof(double)的倍数），该成员变量占用sizeof(double)=8个字节；接下来为第二个成员dda分配空间，这时下一个可以分配的地址对于结构的起始地址的偏移量为8，是sizeof(char)的倍数，所以把dda存放在偏移量为8的地方满足对齐方式，该成员变量占用 sizeof(char)=1个字节；接下来为第三个成员type分配空间，这时下一个可以分配的地址对于结构的起始地址的偏移量为9，不是sizeof (int)=4的倍数，为了满足对齐方式对偏移量的约束问题，VC自动填充3个字节（这三个字节没有放什么东西），这时下一个可以分配的地址对于结构的起始地址的偏移量为12，刚好是sizeof(int)=4的倍数，所以把type存放在偏移量为12的地方，该成员变量占用sizeof(int)=4个字节；这时整个结构的成员变量已经都分配了空间，总的占用的空间大小为：8+1+3+4=16，刚好为结构的字节边界数（即结构中占用最大空间的类型所占用的字节数sizeof(double)=8）的倍数，所以没有空缺的字节需要填充。所以整个结构的大小为：sizeof(MyStruct)=8+1+ 3+4=16，其中有3个字节是VC自动填充的，没有放任何有意义的东西。&lt;/div&gt;
&lt;div&gt;下面再举个例子，交换一下上面的MyStruct的成员变量的位置，使它变成下面的情况：&lt;/div&gt;
&lt;div&gt;struct MyStruct &lt;/div&gt;
&lt;div&gt;{&lt;/div&gt;
&lt;div&gt;char dda;&lt;/div&gt;
&lt;div&gt;double dda1; &lt;/div&gt;
&lt;div&gt;int type&lt;/div&gt;
&lt;div&gt;}；&lt;/div&gt;
&lt;div&gt;这个结构占用的空间为多大呢？在VC6.0环境下，可以得到sizeof(MyStruc)为24。结合上面提到的分配空间的一些原则，分析下VC怎么样为上面的结构分配空间的。&lt;/div&gt;
&lt;div&gt;struct MyStruct &lt;/div&gt;
&lt;div&gt;{&lt;/div&gt;
&lt;div&gt;char dda;//偏移量为0，满足对齐方式，dda占用1个字节；&lt;/div&gt;
&lt;div&gt;double dda1;//下一个可用的地址的偏移量为1，不是sizeof(double)=8的倍数，需要补足7个字节才能使偏移量变为8（满足对齐方式），因此VC自动填充7个字节，dda1存放在偏移量为8的地址上，它占用8个字节。&lt;/div&gt;
&lt;div&gt;int type；//下一个可用的地址的偏移量为16，是sizeof(int)=4的倍数，满足int的对齐方式，所以不需要VC自动填充，type存放在偏移量为16的地址上，它占用4个字节。&lt;/div&gt;
&lt;div&gt;}；&lt;/div&gt;
&lt;div&gt;所有成员变量都分配了空间，空间总的大小为1+7+8+4=20，不是结构的节边界数（即结构中占用最大空间的类型所占用的字节数sizeof (double)=8）的倍数，所以需要填充4个字节，以满足结构的sizeof(double)=8的倍数。所以该结构总的大小为：sizeof (MyStruc)为1+7+8+4+4=24。其中总的有7+4=11个字节是VC自动填充的，没有放任何有意义的东西。&lt;/div&gt;
&lt;div&gt;VC对结构的存储的特殊处理确实提高CPU存储变量的速度，但是有时候也带来了一些麻烦，我们也屏蔽掉变量默认的对齐方式，自己可以设定变量的对齐方式。&lt;/div&gt;
&lt;div&gt;VC 中提供了#pragma pack(n)来设定变量以n字节对齐方式。n字节对齐就是说变量存放的起始地址的偏移量有两种情况：第一、如果n大于等于该变量所占用的字节数，那么偏移量必须满足默认的对齐方式，第二、如果n小于该变量的类型所占用的字节数，那么偏移量为n的倍数，不用满足默认的对齐方式。结构的总大小也有个约束条件，分下面两种情况：如果n大于所有成员变量类型所占用的字节数，那么结构的总大小必须为占用空间最大的变量占用的空间数的倍数；否则必须为n的倍数。&lt;/div&gt;
&lt;div&gt;下面举例说明其用法。&lt;/div&gt;
&lt;div&gt;#pragma pack(push) //保存对齐状态&lt;/div&gt;
&lt;div&gt;#pragma pack(4)//设定为4字节对齐&lt;/div&gt;
&lt;div&gt;struct test&lt;/div&gt;
&lt;div&gt;{&lt;/div&gt;
&lt;div&gt;char m1;&lt;/div&gt;
&lt;div&gt;double m4;&lt;/div&gt;
&lt;div&gt;int m3;&lt;/div&gt;
&lt;div&gt;};&lt;/div&gt;
&lt;div&gt;#pragma pack(pop)//恢复对齐状态&lt;/div&gt;
&lt;div&gt;以上结构的大小为16，下面分析其存储情况，首先为m1分配空间，其偏移量为0，满足我们自己设定的对齐方式（4字节对齐），m1占用1个字节。接着开始为 m4分配空间，这时其偏移量为1，需要补足3个字节，这样使偏移量满足为n=4的倍数（因为sizeof(double)大于n）,m4占用8个字节。接着为m3分配空间，这时其偏移量为12，满足为4的倍数，m3占用4个字节。这时已经为所有成员变量分配了空间，共分配了16个字节，满足为n的倍数。如果把上面的#pragma pack(4)改为#pragma pack(16)，那么我们可以得到结构的大小为24。&lt;/div&gt;
&lt;div&gt;2、 sizeof用法总结&lt;/div&gt;
&lt;div&gt;在VC中，sizeof有着许多的用法，而且很容易引起一些错误。下面根据sizeof后面的参数对sizeof的用法做个总结。&lt;/div&gt;
&lt;div&gt;A． 参数为数据类型或者为一般变量。例如sizeof(int),sizeof(long)等等。这种情况要注意的是不同系统系统或者不同编译器得到的结果可能是不同的。例如int类型在16位系统中占2个字节，在32位系统中占4个字节。&lt;/div&gt;
&lt;div&gt;B． 参数为数组或指针。下面举例说明.&lt;/div&gt;
&lt;div&gt;int a[50]; //sizeof(a)=4*50=200; 求数组所占的空间大小&lt;/div&gt;
&lt;div&gt;int *a=new int[50];// sizeof(a)=4; a为一个指针，sizeof(a)是求指针的大小,在32位系统中，当然是占4个字节。&lt;/div&gt;
&lt;div&gt;C．参数为结构或类。Sizeof应用在类和结构的处理情况是相同的。但有两点需要注意：第一、结构或者类中的静态成员不对结构或者类的大小产生影响，因为静态变量的存储位置与结构或者类的实例地址无关。第二、没有成员变量的结构或类的大小为1，因为必须保证结构或类的每一个实例在内存中都有唯一的地址。&lt;/div&gt;
&lt;div&gt;下面举例说明，&lt;/div&gt;
&lt;div&gt;Class Test{int a;static double c};//sizeof(Test)=4，静态成员不对结构或者类的大小产生影响&lt;/div&gt;
&lt;div&gt;Test *s;//sizeof(s)=4,s为一个指针。&lt;/div&gt;
&lt;div&gt;Class test1{ };//sizeof(test1)=1，没有成员变量的结构或类的大小为1&lt;/div&gt;
&lt;div&gt;D． 参数为其他。下面举例说明。&lt;/div&gt;
&lt;div&gt;int func(char s[5]);&lt;/div&gt;
&lt;div&gt;{&lt;/div&gt;
&lt;div&gt;cout&amp;lt;&lt;br&gt;//数的参数在传递的时候系统处理为一个指针，所以sizeof(s)实际上为求指针的大小。&lt;/div&gt;
&lt;div&gt;return 1;&lt;/div&gt;
&lt;div&gt;}&lt;/div&gt;
&lt;div&gt;//sizeof(func(“1234”))=4//因为func的返回类型为int，所以相当于求sizeof(int).&lt;/div&gt;
&lt;div&gt;以上为sizeof的基本用法，在实际的使用中要注意分析VC的分配变量的分配策略，这样的话可以避免一些错误。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;strong&gt;相关文章：&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;    &lt;a href="http://spaces.msn.com/ruanqizhen/blog/cns!5852D4F797C53FB6!1073.entry"&gt;技术文章&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div align=right&gt;&lt;a href="http://spaces.msn.com/members/ruanqizhen/PersonalSpace.aspx?_c11_BlogPart_handle=cns!1pU-rgQVTuuWM1TX8W8PfmDA!1214&amp;amp;_c11_BlogPart_blogpart=blogentry&amp;amp;_c11_BlogPart_frompart=myspace&amp;amp;_c=BlogPart&amp;amp;_c02_owner=1"&gt;编辑&lt;/a&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=6364383383296229302&amp;page=RSS%3a+VC%e4%b8%ad%e7%9a%84%e5%ad%97%e8%8a%82%e5%af%b9%e9%bd%90&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=ruanqizhen.spaces.live.com&amp;amp;GT1=ruanqizhen"&gt;</description><comments>http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1214.entry#comment</comments><guid isPermaLink="true">http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1214.entry</guid><pubDate>Tue, 24 Jan 2006 07:16:12 GMT</pubDate><slash:comments>3</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://ruanqizhen.spaces.live.com/blog/cns!5852D4F797C53FB6!1214/comments/feed.rss</wfw:commentRss><wfw:comment>http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1214.entry#comment</wfw:comment><dcterms:modified>2006-03-19T19:27:17Z</dcterms:modified></item><item><title>让系统时间更准确</title><link>http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1213.entry</link><description>&lt;div&gt;使用NTP协议可以让你的计算机自动与服务器上的时间同步。从而保持最准确的时间。&lt;/div&gt;
&lt;div&gt;中国国家授时中心的IP地址是：210.72.145.44。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;在 Windows XP/2000 可下使用以下命令设置计算机的时间同步：&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;在控制面板,管理工具,服务中找到 Windows Time，设置启动类型为自动，再按下启动按钮。&lt;/div&gt;
&lt;div&gt;在 DOS 命令行下让 Windows 使用国家授时中心的时间服务器：net time /setsntp:210.72.145.44&lt;/div&gt;
&lt;div&gt;&lt;br&gt;要想立刻与时间服务器同步需要重启时间服务，相应的命令是：&lt;br&gt;net stop w32time&lt;br&gt;net start w32time&lt;/div&gt;
&lt;div&gt;&lt;br&gt;以后你的机器就会有一个准确的时间。&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=6364383383296229302&amp;page=RSS%3a+%e8%ae%a9%e7%b3%bb%e7%bb%9f%e6%97%b6%e9%97%b4%e6%9b%b4%e5%87%86%e7%a1%ae&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=ruanqizhen.spaces.live.com&amp;amp;GT1=ruanqizhen"&gt;</description><comments>http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1213.entry#comment</comments><guid isPermaLink="true">http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1213.entry</guid><pubDate>Tue, 24 Jan 2006 01:40:48 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://ruanqizhen.spaces.live.com/blog/cns!5852D4F797C53FB6!1213/comments/feed.rss</wfw:commentRss><wfw:comment>http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1213.entry#comment</wfw:comment><dcterms:modified>2006-01-24T01:40:48Z</dcterms:modified></item><item><title>今天把我的 Hotmail 变成了 Live Mail</title><link>http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1204.entry</link><description>&lt;div&gt;  &lt;img src="http://www.d3pd.com/bbs/1136350125/Mon_0601/27_57_582e036d90b6bb0.jpg" width=564 border=0&gt; &lt;br&gt;&lt;br&gt;图片： &lt;br&gt;&lt;img src="http://www.d3pd.com/bbs/1136350125/Mon_0601/27_57_53fb416b4209c34.jpg" width=564 border=0&gt; &lt;br&gt;&lt;br&gt;图片： &lt;br&gt;&lt;img src="http://www.d3pd.com/bbs/1136350125/Mon_0601/27_57_6fa384f491b06e7.jpg" width=564 border=0&gt; &lt;br&gt;&lt;span&gt;今天看到在Neowin有人找到一个不用邀请也能把Hotmail 变成Live Mail Beta的方法,但成功率只有50%罢了!&lt;br&gt;也有人说你的hotmail用了３年的成功转换机会比较高,N多人都已经成功了!!!&lt;br&gt;&lt;br&gt;&lt;br&gt;1.首先要把你的个人资料改去&lt;br&gt;Language --&amp;gt; English&lt;br&gt;Country --&amp;gt; United States&lt;br&gt;State --&amp;gt; Florida.&lt;br&gt;&lt;br&gt;2. 把这个网址LINK 放在浏览器(只是IE)&lt;br&gt;&lt;a href="http://by101fd.bay101.hotmail.msn.com/cgi-bin/BetaOptIn?page=option&amp;amp;curmbox=00000000-0000-0000-0000-000000000001&amp;amp;a=b9a426ebd4880ad9d14db4b4c55a69f8bb8dea2282102422220030b2b6bb98c8" target="_blank"&gt;&lt;u&gt;&lt;font color="#800080"&gt;http://by101fd.bay101.hotmail.msn.com/cgi-bin/BetaOptIn?page=option&amp;amp;curmbox=00000000%2d0000%2d0000%2d0000%2d000000000001&amp;amp;a=b9a426ebd4880ad9d14db4b4c55a69f8bb8dea2282102422220030b2b6bb98c8&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;3.Sign in&lt;br&gt;&lt;br&gt;4.你应该登入不到，再把网址放在浏览器。&lt;br&gt;&lt;br&gt;5.当你看到&amp;quot;Participate&amp;quot;，那么你就成功了。&lt;/span&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;
&lt;div&gt;Live Mail 功能介绍：&lt;/div&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://join.msn.com/mailbeta/features#1"&gt;http://join.msn.com/mailbeta/features#1&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Live Mail 最主要的升级一是支持拖放，这样在网页上操作信件就和在终端上一样方便了，二是容量扩大到2G了。&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=6364383383296229302&amp;page=RSS%3a+%e4%bb%8a%e5%a4%a9%e6%8a%8a%e6%88%91%e7%9a%84+Hotmail+%e5%8f%98%e6%88%90%e4%ba%86+Live+Mail&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=ruanqizhen.spaces.live.com&amp;amp;GT1=ruanqizhen"&gt;</description><comments>http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1204.entry#comment</comments><guid isPermaLink="true">http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1204.entry</guid><pubDate>Wed, 04 Jan 2006 09:47:18 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://ruanqizhen.spaces.live.com/blog/cns!5852D4F797C53FB6!1204/comments/feed.rss</wfw:commentRss><wfw:comment>http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1204.entry#comment</wfw:comment><dcterms:modified>2006-01-04T09:53:57Z</dcterms:modified></item><item><title>LabVIEW 读取 DLL 函数中的字符串的一个小经验</title><link>http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1109.entry</link><description>&lt;div&gt;我们以前在编写 LabVIEW 调用 C DLL 的程序的时候，使用以下策略读取 DLL 函数中的字符串：&lt;/div&gt;
&lt;div&gt;1. 如果能够确保在符串小于 256，比如参数名的字符串等等，就直接在 LabVIEW 中开辟一块大小为 256 的内存。&lt;br&gt;2. 如果不能保证字符串大小，就要为一个读取字符串的 VI 提供两个 DLL 接口函数，先调用一个函数得到字符串的大小，然后在 VI 中开辟内存，之后调用第二个函数得到字符串。&lt;/div&gt;
&lt;div&gt;我在使用中，发现第一条策略不保险，应该全部使用第二条策略。&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=6364383383296229302&amp;page=RSS%3a+LabVIEW+%e8%af%bb%e5%8f%96+DLL+%e5%87%bd%e6%95%b0%e4%b8%ad%e7%9a%84%e5%ad%97%e7%ac%a6%e4%b8%b2%e7%9a%84%e4%b8%80%e4%b8%aa%e5%b0%8f%e7%bb%8f%e9%aa%8c&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=ruanqizhen.spaces.live.com&amp;amp;GT1=ruanqizhen"&gt;</description><comments>http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1109.entry#comment</comments><guid isPermaLink="true">http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1109.entry</guid><pubDate>Tue, 22 Nov 2005 02:36:15 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://ruanqizhen.spaces.live.com/blog/cns!5852D4F797C53FB6!1109/comments/feed.rss</wfw:commentRss><wfw:comment>http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1109.entry#comment</wfw:comment><dcterms:modified>2005-11-22T02:36:42Z</dcterms:modified></item><item><title>MSI Installer 中的升级</title><link>http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1107.entry</link><description>&lt;div&gt;    这是我遇到的一个 MSI Installer 的问题。&lt;/div&gt;
&lt;div&gt;    当目标机器已经装有一个旧版本的软件，现在我们又产生了一个新的安装包，并且在新安装包中制定了升级策略。在目标机器上安装新版本软件后，发现一些文件没有被安装上。使用 MSI Installer 的修复功能，缺失的文件才被装上。&lt;/div&gt;
&lt;div&gt;    这是 MSI Installer 的 Component 的升级策略所决定的。MSI Intaller 规范认为，所有的 Component 在不同的版本中只应有文件的更新，而不应有文件数量的增加或减少，或文件名变化。并且，MSI Installer 为了提高效率，在安装时，是先安装新文件，再删除旧版本。由于我们平时在制作 Installer 时，为了方便，没有完全保证 Component 在不同版本下保持一致。这就造成了升级策略的混乱。在安装包运行到移除旧版本这一步时，本来不应当被删掉的 Component 也被删掉了。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;    一个简单的解决办法是，让 MSI Installer 先卸载旧版本，再安装新文件。具体办法是把 RemoveExistingProducts Action 向前移到 InstallValidate action 和 InstallInitialize action 之间。Platform SDK上有详细说明。 这样，在升级时，会慢一些。但不至于造成混乱。&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=6364383383296229302&amp;page=RSS%3a+MSI+Installer+%e4%b8%ad%e7%9a%84%e5%8d%87%e7%ba%a7&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=ruanqizhen.spaces.live.com&amp;amp;GT1=ruanqizhen"&gt;</description><comments>http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1107.entry#comment</comments><guid isPermaLink="true">http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1107.entry</guid><pubDate>Mon, 21 Nov 2005 12:59:51 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://ruanqizhen.spaces.live.com/blog/cns!5852D4F797C53FB6!1107/comments/feed.rss</wfw:commentRss><wfw:comment>http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1107.entry#comment</wfw:comment><dcterms:modified>2005-11-21T12:59:51Z</dcterms:modified></item><item><title>用WiX编写MSI安装包</title><link>http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1106.entry</link><description>&lt;div&gt;  
&lt;p&gt;&lt;a title="" href="http://sourceforge.net/projects/wix/" target="_blank"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;WiX&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;（Windows Installer XML）是&lt;a title="" href="http://blogs.msdn.com/robmen/" target="_blank"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;Rob Mensching&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;（Windows组的一个SDE）写的一个用来编写MSI安装包的工具集，已经被微软内部的很多产品组采用，例如Office组，以及我所在的MSN组，等等。
&lt;p&gt;下面是WiX的一个简单例子（相当于高级的Hello World!的级别），在这个例子中编写了一个SimpleCopy.msi。安装SimpleCopy.msi将能够：
&lt;ul&gt;
&lt;li&gt;创建C:\Program Files\SimpleCopy目录并拷贝一系列文件；
&lt;li&gt;创建HKEY_LOCAL_MACHINE\SOFTWARE\MPG Lab注册表键，该键下的DestPath变量存储了一个文件路径，DestPath可以在msiexec命令行中用DESTPATH来指定；
&lt;li&gt;创建名为SimplyCopy的Scheduled Task，该任务每小时运行一次，执行C:\Program Files\SimpleCopy\SimpleCopy.exe，将该目录下data\source.xml拷贝到DestPath中指定的目录；
&lt;li&gt;Uninstall时，安装时拷贝的文件、创建的注册表键和Scheduled Task都将被删除。&lt;/ul&gt;
&lt;p&gt;下面就是用WiX编写SimpleCopy.msi的步骤：
&lt;p&gt;1. 从&lt;a href="http://sourceforge.net/projects/wix"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;http://sourceforge.net/projects/wix&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;下载wix的&lt;a title="" href="http://prdownloads.sourceforge.net/wix/binaries-2.0.3220.0.zip?download" target="_blank"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;2.0.3220.0&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;版本并解压到硬盘，将candle.exe所在的路径添加到Path环境变量中；&lt;br&gt;2. 用C#编写SimpleCopy.cs并用csc.exe在同一目录下编译成SimpleCopy.exe:&lt;pre&gt;&lt;div&gt;&lt;img src="http://blog.joycode.com/images/OutliningIndicators/None.gif" align=top&gt;&lt;span style="color:rgb(0,0,255)"&gt;using&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt; System;
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/None.gif" align=top&gt;&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;using&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt; System.IO;
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/None.gif" align=top&gt;&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;using&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt; System.Reflection;
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/None.gif" align=top&gt;&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;using&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt; Microsoft.Win32;
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/None.gif" align=top&gt;
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/None.gif" align=top&gt;&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;namespace&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt; SimpleCopy
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/ExpandedBlockStart.gif" align=top&gt;&lt;img style="display:none" src="http://blog.joycode.com/images/OutliningIndicators/ContractedBlock.gif" align=top&gt;&lt;/span&gt;&lt;span style="border-right:rgb(128,128,128) 1px solid;border-top:rgb(128,128,128) 1px solid;display:none;border-left:rgb(128,128,128) 1px solid;border-bottom:rgb(128,128,128) 1px solid;background-color:rgb(255,255,255)"&gt;...&lt;/span&gt;&lt;span&gt;&lt;span style="color:rgb(0,0,0)"&gt;{
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/InBlock.gif" align=top&gt;    &lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;internal&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt; &lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;class&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt; Application
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top&gt;&lt;img style="display:none" src="http://blog.joycode.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top&gt;    &lt;/span&gt;&lt;span style="border-right:rgb(128,128,128) 1px solid;border-top:rgb(128,128,128) 1px solid;display:none;border-left:rgb(128,128,128) 1px solid;border-bottom:rgb(128,128,128) 1px solid;background-color:rgb(255,255,255)"&gt;...&lt;/span&gt;&lt;span&gt;&lt;span style="color:rgb(0,0,0)"&gt;{
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/InBlock.gif" align=top&gt;        [STAThread]
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/InBlock.gif" align=top&gt;        &lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;private&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt; &lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;static&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt; &lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;void&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt; Main(&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;string&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;[] args)
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top&gt;&lt;img style="display:none" src="http://blog.joycode.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top&gt;        &lt;/span&gt;&lt;span style="border-right:rgb(128,128,128) 1px solid;border-top:rgb(128,128,128) 1px solid;display:none;border-left:rgb(128,128,128) 1px solid;border-bottom:rgb(128,128,128) 1px solid;background-color:rgb(255,255,255)"&gt;...&lt;/span&gt;&lt;span&gt;&lt;span style="color:rgb(0,0,0)"&gt;{
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/InBlock.gif" align=top&gt;            &lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;string&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt; sourcexml &lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;=&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt; GetExecutableLocation() &lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;+&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt; &lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;@&amp;quot;&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;\data\source.xml&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;;
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top&gt;&lt;img style="display:none" src="http://blog.joycode.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top&gt;            &lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;if&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt; (File.Exists(sourcexml))&lt;/span&gt;&lt;span style="border-right:rgb(128,128,128) 1px solid;border-top:rgb(128,128,128) 1px solid;display:none;border-left:rgb(128,128,128) 1px solid;border-bottom:rgb(128,128,128) 1px solid;background-color:rgb(255,255,255)"&gt;...&lt;/span&gt;&lt;span&gt;&lt;span style="color:rgb(0,0,0)"&gt;{
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/InBlock.gif" align=top&gt;                DateTime now &lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;=&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt; DateTime.Now;
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/InBlock.gif" align=top&gt;                File.Copy(sourcexml, Application.QueryDestPath() &lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;+&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/InBlock.gif" align=top&gt;                            &lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;@&amp;quot;&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;\source_&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt; &lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;+&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt; now.ToString(&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;yyMMdd_HH.mm.ss&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;) &lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;+&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt; &lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;.xml&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;, &lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;true&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;);
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top&gt;            }&lt;/span&gt;&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top&gt;&lt;img style="display:none" src="http://blog.joycode.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top&gt;            &lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;else&lt;/span&gt;&lt;span style="border-right:rgb(128,128,128) 1px solid;border-top:rgb(128,128,128) 1px solid;display:none;border-left:rgb(128,128,128) 1px solid;border-bottom:rgb(128,128,128) 1px solid;background-color:rgb(255,255,255)"&gt;...&lt;/span&gt;&lt;span&gt;&lt;span style="color:rgb(0,0,0)"&gt;{
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/InBlock.gif" align=top&gt;                StreamWriter writer &lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;=&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt; &lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;new&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt; StreamWriter(QueryDestPath() &lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;+&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt; &lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;@&amp;quot;&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;\error.log&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;, &lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;false&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;);
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/InBlock.gif" align=top&gt;                writer.WriteLine(DateTime.Now.ToString());
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/InBlock.gif" align=top&gt;                writer.WriteLine(&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;Cannot find source file: &lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt; &lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;+&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt; sourcexml);
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/InBlock.gif" align=top&gt;                writer.Close();
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top&gt;            }&lt;/span&gt;&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top&gt;        }&lt;/span&gt;&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/InBlock.gif" align=top&gt;
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/InBlock.gif" align=top&gt;        &lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;private&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt; &lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;static&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt; &lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;string&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt; QueryDestPath()
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top&gt;&lt;img style="display:none" src="http://blog.joycode.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top&gt;        &lt;/span&gt;&lt;span style="border-right:rgb(128,128,128) 1px solid;border-top:rgb(128,128,128) 1px solid;display:none;border-left:rgb(128,128,128) 1px solid;border-bottom:rgb(128,128,128) 1px solid;background-color:rgb(255,255,255)"&gt;...&lt;/span&gt;&lt;span&gt;&lt;span style="color:rgb(0,0,0)"&gt;{
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/InBlock.gif" align=top&gt;            RegistryKey regkey &lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;=&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt; Registry.LocalMachine.OpenSubKey(&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;@&amp;quot;&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;SOFTWARE\MPG Lab&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;);
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top&gt;&lt;img style="display:none" src="http://blog.joycode.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top&gt;            &lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;if&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt; (regkey &lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;!=&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt; &lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;null&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;)&lt;/span&gt;&lt;span style="border-right:rgb(128,128,128) 1px solid;border-top:rgb(128,128,128) 1px solid;display:none;border-left:rgb(128,128,128) 1px solid;border-bottom:rgb(128,128,128) 1px solid;background-color:rgb(255,255,255)"&gt;...&lt;/span&gt;&lt;span&gt;&lt;span style="color:rgb(0,0,0)"&gt;{
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/InBlock.gif" align=top&gt;                &lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;object&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt; obj &lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;=&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt; regkey.GetValue(&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;DestPath&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;);
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top&gt;&lt;img style="display:none" src="http://blog.joycode.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top&gt;                &lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;if&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt; (obj &lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;!=&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt; &lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;null&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;)&lt;/span&gt;&lt;span style="border-right:rgb(128,128,128) 1px solid;border-top:rgb(128,128,128) 1px solid;display:none;border-left:rgb(128,128,128) 1px solid;border-bottom:rgb(128,128,128) 1px solid;background-color:rgb(255,255,255)"&gt;...&lt;/span&gt;&lt;span&gt;&lt;span style="color:rgb(0,0,0)"&gt;{
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/InBlock.gif" align=top&gt;                    &lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;return&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt; obj.ToString();
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top&gt;                }&lt;/span&gt;&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;                
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top&gt;            }&lt;/span&gt;&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/InBlock.gif" align=top&gt;
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top&gt;&lt;img style="display:none" src="http://blog.joycode.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top&gt;            &lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;if&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt; (&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;false&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt; &lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;==&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt; Directory.Exists(GetExecutableLocation() &lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;+&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt; &lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;@&amp;quot;&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;\regkey_not_found&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;))&lt;/span&gt;&lt;span style="border-right:rgb(128,128,128) 1px solid;border-top:rgb(128,128,128) 1px solid;display:none;border-left:rgb(128,128,128) 1px solid;border-bottom:rgb(128,128,128) 1px solid;background-color:rgb(255,255,255)"&gt;...&lt;/span&gt;&lt;span&gt;&lt;span style="color:rgb(0,0,0)"&gt;{
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/InBlock.gif" align=top&gt;                Directory.CreateDirectory(GetExecutableLocation() &lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;+&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt; &lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;@&amp;quot;&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;\regkey_not_found&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;);
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top&gt;            }&lt;/span&gt;&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/InBlock.gif" align=top&gt;            &lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;return&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt; (GetExecutableLocation() &lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;+&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt; &lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;@&amp;quot;&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;\regkey_not_found&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;);
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top&gt;        }&lt;/span&gt;&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/InBlock.gif" align=top&gt;
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/InBlock.gif" align=top&gt;        &lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;private&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt; &lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;static&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt; &lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;string&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt; GetExecutableLocation()
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top&gt;&lt;img style="display:none" src="http://blog.joycode.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top&gt;        &lt;/span&gt;&lt;span style="border-right:rgb(128,128,128) 1px solid;border-top:rgb(128,128,128) 1px solid;display:none;border-left:rgb(128,128,128) 1px solid;border-bottom:rgb(128,128,128) 1px solid;background-color:rgb(255,255,255)"&gt;...&lt;/span&gt;&lt;span&gt;&lt;span style="color:rgb(0,0,0)"&gt;{
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/InBlock.gif" align=top&gt;            &lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;return&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt; Directory.GetParent(Assembly.GetEntryAssembly().Location).ToString();
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top&gt;        }&lt;/span&gt;&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/InBlock.gif" align=top&gt;
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top&gt;    }&lt;/span&gt;&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p&gt;3. 在SimpleCopy.cs同一目录下创建&amp;quot;data&amp;quot;子目录，在data\下创建一个任意内容的source.xml；&lt;br&gt;4. 在SimpleCopy.cs同一目录下编写SimpleCopy.wxs，其Schema文件wix.xsd可以在wix下载解压后的doc目录中找到。SimpleCopy.wxs内容如下：&lt;pre&gt;&lt;div&gt;&lt;img src="http://blog.joycode.com/images/OutliningIndicators/None.gif" align=top&gt;&lt;span style="color:rgb(0,0,255)"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:rgb(255,0,255)"&gt;xml version='1.0'&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;?&amp;gt;&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/None.gif" align=top&gt;&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:rgb(128,0,0)"&gt;Wix &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;xmlns&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;='http://schemas.microsoft.com/wix/2003/01/wi'&amp;gt;
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/None.gif" align=top&gt;    &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;&amp;lt;Product Id&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;='c859431f-086d-4840-b2d7-a84b3bce50f2' &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;Name&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;='SimpleCopy' 
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/None.gif" align=top&gt;            &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;Language&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;='1033' &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;Version&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;='1.0.0.0' &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;Manufacturer&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;='MPG &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;China'&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/None.gif" align=top&gt;        &lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:rgb(128,0,0)"&gt;Package &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;Id&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;='2738eb03-978b-4712-8e21-7e1868c74c2f' &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;InstallerVersion&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;='200' &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;Compressed&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;='yes' &lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/None.gif" align=top&gt;        &lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:rgb(128,0,0)"&gt;Property &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;Id&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;='DESTPATH' &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;Value &lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;='C:\'/&amp;gt;
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/None.gif" align=top&gt;        &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;&amp;lt;Media Id&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;='1' &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;Cabinet&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;='product.cab' &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;EmbedCab&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;='yes' &lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/None.gif" align=top&gt;        &lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:rgb(128,0,0)"&gt;Directory &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;Id&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;='TARGETDIR' &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;Name&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;='SourceDir'&amp;gt;
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/None.gif" align=top&gt;            &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;&amp;lt;Directory Id&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;='ProgramFilesFolder' &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;Name&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;='PFiles'&amp;gt;
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/None.gif" align=top&gt;                &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;&amp;lt;Directory Id&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;='AppDirectory' &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;Name&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;='SimpleCp' &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;LongName&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;='SimpleCopy'&amp;gt;
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/None.gif" align=top&gt;                    &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;&amp;lt;Component Id&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;='ExecutableFile' &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;DiskId&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;='1' &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;Guid&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;='379ccaeb-a8c9-448e-a4b3-fa9884676492'&amp;gt;
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/None.gif" align=top&gt;                        &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;&amp;lt;File Id&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;='SimpleCopy_exe' &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;Name&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;='SimpleCp.exe' 
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/None.gif" align=top&gt;                            &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;LongName&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;='SimpleCopy.exe' &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;src&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;='SimpleCopy.exe' &lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/None.gif" align=top&gt;                    &lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:rgb(128,0,0)"&gt;Component&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/None.gif" align=top&gt;                    &lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:rgb(128,0,0)"&gt;Directory &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;Id&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;='DataFolder' &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;Name&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;='data'&amp;gt;
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/None.gif" align=top&gt;                        &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;&amp;lt;Component Id&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;='SrcXml' &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;DiskId&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;='1' &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;Guid&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;='746496f1-d2b1-4334-9b6f-00f71938c459'&amp;gt;
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/None.gif" align=top&gt;                            &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;&amp;lt;File Id&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;='Source_xml' &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;Name&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;='source.xml' &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;src&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;='data\source.xml' &lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/None.gif" align=top&gt;                            &lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:rgb(128,0,0)"&gt;Registry &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;Id&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;='4e10403a-1976-447f-b38c-59839cb7c5cb' &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;Root&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;='HKLM' &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;Type&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;='string' 
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/None.gif" align=top&gt;                                &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;Key&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;='SOFTWARE\MPG &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;Lab' Name&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;='DestPath' &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;Value &lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;='[DESTPATH]'/&amp;gt;
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/None.gif" align=top&gt;                        &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;&amp;lt;/Component&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/None.gif" align=top&gt;                    &lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:rgb(128,0,0)"&gt;Directory&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/None.gif" align=top&gt;                &lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:rgb(128,0,0)"&gt;Directory&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/None.gif" align=top&gt;            &lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:rgb(128,0,0)"&gt;Directory&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/None.gif" align=top&gt;        &lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:rgb(128,0,0)"&gt;Directory&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/None.gif" align=top&gt;        &lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:rgb(128,0,0)"&gt;Feature &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;Id&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;='AllFiles' &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;Title&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;='Simple &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;Copy All Files' Level&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;='1'&amp;gt;
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/None.gif" align=top&gt;            &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;&amp;lt;ComponentRef Id&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;='ExecutableFile' &lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/None.gif" align=top&gt;            &lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:rgb(128,0,0)"&gt;ComponentRef &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;Id&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;='SrcXml' &lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/None.gif" align=top&gt;        &lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:rgb(128,0,0)"&gt;Feature&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/None.gif" align=top&gt;        &lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:rgb(128,0,0)"&gt;InstallExecuteSequence&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/None.gif" align=top&gt;            &lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:rgb(128,0,0)"&gt;Custom &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;Action&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;='CreateScheduleTask' &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;After&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;='InstallFinalize'&amp;gt;NOT &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;Installed&amp;lt;/Custom&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/None.gif" align=top&gt;            &lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:rgb(128,0,0)"&gt;Custom &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;Action&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;='DeleteScheduleTask' &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;After&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;='InstallFinalize'&amp;gt;Installed&amp;lt;/Custom&amp;gt;
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/None.gif" align=top&gt;        &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;&amp;lt;/InstallExecuteSequence&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/None.gif" align=top&gt;        &lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:rgb(128,0,0)"&gt;Property &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;Id&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;='SCHTASKS'&amp;gt;SCHTASKS.exe&amp;lt;/Property&amp;gt;
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/None.gif" align=top&gt;        &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;&amp;lt;CustomAction Id&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;='CreateScheduleTask' &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;Property&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;='SCHTASKS' 
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/None.gif" align=top&gt;            &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;ExeCommand&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;='/Create &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;/RU &amp;quot;&amp;quot; /SC HOURLY /TN SimplyCopy /TR &amp;quot;%ProgramFiles%\SimpleCopy\SimpleCopy.exe&amp;quot;'&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/None.gif" align=top&gt;        &lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:rgb(128,0,0)"&gt;CustomAction &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;Id&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;='DeleteScheduleTask' &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;Property&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;='SCHTASKS' 
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/None.gif" align=top&gt;            &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;ExeCommand&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;='/Delete &lt;/span&gt;&lt;span style="color:rgb(255,0,0)"&gt;/TN SimplyCopy /F'&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/None.gif" align=top&gt;    &lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:rgb(128,0,0)"&gt;Product&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:rgb(0,0,0)"&gt;
&lt;img src="http://blog.joycode.com/images/OutliningIndicators/None.gif" align=top&gt;&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:rgb(128,0,0)"&gt;Wix&lt;/span&gt;&lt;span style="color:rgb(0,0,255)"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p&gt;5. 打开命令行，进入SimpleCopy.cs所在的目录，先后运行&lt;font face="Courier New" color="#000000"&gt;candle SimpleCopy.wxs&lt;/font&gt;以及&lt;font face="Courier New"&gt;light SimpleCopy.wixobj&lt;/font&gt;，然后就得到SimpleCopy.msi了：
&lt;p&gt;&lt;img src="http://blog.joycode.com/images/blog.joycode.com/mvm/899/o_wixsample.gif"&gt;
&lt;p&gt;6. 在命令行运行“&lt;font face="Courier New"&gt;msiexec /i SimpleCopy.msi /quiet /log log.txt DESTPATH=d:\&lt;/font&gt;”就可以安装了。
&lt;p&gt;相比较其他MSI编写工具（例如Visual Studio 2003/2005，以及InstallShield等），WiX的优点是：
&lt;ol&gt;
&lt;li&gt;便于版本控制（wxs是纯文本的）；
&lt;li&gt;便于自动化（编辑工具candle.exe和light.exe都是命令行的）。&lt;/ol&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=6364383383296229302&amp;page=RSS%3a+%e7%94%a8WiX%e7%bc%96%e5%86%99MSI%e5%ae%89%e8%a3%85%e5%8c%85&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=ruanqizhen.spaces.live.com&amp;amp;GT1=ruanqizhen"&gt;</description><comments>http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1106.entry#comment</comments><guid isPermaLink="true">http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1106.entry</guid><pubDate>Mon, 21 Nov 2005 06:27:20 GMT</pubDate><slash:comments>3</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://ruanqizhen.spaces.live.com/blog/cns!5852D4F797C53FB6!1106/comments/feed.rss</wfw:commentRss><wfw:comment>http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1106.entry#comment</wfw:comment><dcterms:modified>2005-11-21T06:27:20Z</dcterms:modified></item><item><title>C# 中的接口与抽象类</title><link>http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1102.entry</link><description>&lt;div&gt; &lt;span&gt; 
&lt;p style=""&gt;&lt;b&gt;&lt;font size=2&gt;&lt;span style="font-family:宋体"&gt;一．接口的定义&lt;/span&gt;&lt;span lang=EN-US&gt;&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;
&lt;p style=""&gt;&lt;font size=2&gt;&lt;b&gt;&lt;span style="font-family:宋体"&gt;定义&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family:宋体"&gt;：定义一个协定。实现接口的类或结构必须遵守其协定。&lt;/span&gt;&lt;/font&gt;
&lt;p style=""&gt;&lt;span style="font-family:宋体"&gt;&lt;font size=2&gt;简单的说就是接口或者类之间交互时遵守的一个显示定义。最初接触“类与类之间通过接口交互”这个概念时，误以为接口就是类公开的方法，类之间通过类的方法进行交互。其实接口是独立于类的一个定义。接口定义类之间交互的标准。&lt;/font&gt;&lt;/span&gt;
&lt;p style=""&gt;&lt;span style="font-family:宋体"&gt;&lt;font size=2&gt;那么类与类之间直接交互就好了，为什么还要使用接口呢？&lt;/font&gt;&lt;/span&gt;
&lt;p style=""&gt;&lt;span style="font-family:宋体"&gt;&lt;font size=2&gt;这主要是因为：接口是类之间交互内容的一个抽象，把类之间需要交互的内容抽象出来定义成接口，可以更好的控制类之间的逻辑交互。可见接口内容的抽象好坏关系到整个程序的逻辑质量；另外可以在任何时候通过开发附加接口和实现来添加新的功能；&lt;/font&gt;&lt;/span&gt;
&lt;p style=""&gt;&lt;span style="font-family:宋体"&gt;&lt;font size=2&gt;关于接口一个很重要的概念：接口只包含成员定义，不包含成员的实现，成员的实现需要在继承的类或者结构中实现。&lt;/font&gt;&lt;/span&gt;
&lt;p style=""&gt;&lt;font size=2&gt;&lt;span style="font-family:宋体"&gt;接口的成员包括：方法&lt;/span&gt;&lt;span lang=EN-US&gt;,&lt;/span&gt;&lt;span style="font-family:宋体"&gt;特性，索引器，事件。&lt;/span&gt;&lt;/font&gt;
&lt;p style=""&gt;&lt;font size=2&gt;&lt;b&gt;&lt;span style="font-family:宋体"&gt;注意：&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family:宋体"&gt;接口不包含字段。&lt;/span&gt;&lt;/font&gt;
&lt;p style="text-indent:31.5pt"&gt;&lt;span style="font-family:宋体"&gt;&lt;font size=2&gt;实现接口的类必须严格按其定义来实现接口的每个方面&lt;/font&gt;&lt;/span&gt;
&lt;p style=""&gt;&lt;font size=2&gt;&lt;span lang=EN-US&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:宋体"&gt;接口本身一旦被发布就不能再更改，对已发布的接口进行更改会破坏现有的代码。&lt;/span&gt;&lt;/font&gt;
&lt;p style=""&gt;&lt;font size=2&gt;&lt;span style="font-family:宋体"&gt;一个典型的接口示例：&lt;/span&gt;&lt;span lang=EN-US&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;/font&gt;
&lt;p style=""&gt;&lt;span lang=EN-US&gt;&lt;font size=2&gt;using System;&lt;/font&gt;&lt;/span&gt;
&lt;p style=""&gt;&lt;span lang=EN-US&gt;&lt;font size=2&gt;using System.Colletion;&lt;/font&gt;&lt;/span&gt;
&lt;p style=""&gt;&lt;font size=2&gt;&lt;span lang=EN-US&gt;public delegate voic Chang(object&lt;span&gt;  &lt;/span&gt;sender,object event)//&lt;/span&gt;&lt;span style="font-family:宋体"&gt;定义一个委托&lt;/span&gt;&lt;/font&gt;
&lt;p style=""&gt;&lt;font size=2&gt;&lt;span lang=EN-US&gt;public interface Ibroker&lt;span&gt;  &lt;/span&gt;//&lt;/span&gt;&lt;span style="font-family:宋体"&gt;定义一个股票经济人接口&lt;/span&gt;&lt;/font&gt;
&lt;p style=""&gt;&lt;span lang=EN-US&gt;&lt;font size=2&gt;{&lt;/font&gt;&lt;/span&gt;
&lt;p style=""&gt;&lt;font size=2&gt;&lt;span lang=EN-US&gt;&lt;span&gt;  &lt;/span&gt;string GetRating (string stock);//&lt;/span&gt;&lt;span style="font-family:宋体"&gt;一个获得金额的方法（此处没有实现）&lt;/span&gt;&lt;/font&gt;
&lt;p style=""&gt;&lt;font size=2&gt;&lt;span lang=EN-US&gt;&lt;span&gt;  &lt;/span&gt;decimal pricePerTrade&lt;span&gt;    &lt;/span&gt;//&lt;/span&gt;&lt;span style="font-family:宋体"&gt;定义一个设置每股价格的特性&lt;/span&gt;&lt;/font&gt;
&lt;p style=""&gt;&lt;span lang=EN-US&gt;&lt;font size=2&gt;&lt;span&gt;  &lt;/span&gt;{&lt;/font&gt;&lt;/span&gt;
&lt;p style="text-indent:21.75pt"&gt;&lt;font size=2&gt;&lt;span lang=EN-US&gt;get;&lt;span&gt;                &lt;/span&gt;//&lt;/span&gt;&lt;span style="font-family:宋体"&gt;没有实现的&lt;/span&gt;&lt;/font&gt;
&lt;p style="text-indent:21.75pt"&gt;&lt;span lang=EN-US&gt;&lt;font size=2&gt;set;&lt;/font&gt;&lt;/span&gt;
&lt;p style="text-indent:10.5pt"&gt;&lt;span lang=EN-US&gt;&lt;font size=2&gt;}&lt;/font&gt;&lt;/span&gt;
&lt;p style="text-indent:10.5pt"&gt;&lt;font size=2&gt;&lt;span lang=EN-US&gt;decimal this(string StockName)&lt;span&gt;    &lt;/span&gt;//&lt;/span&gt;&lt;span style="font-family:宋体"&gt;定义索引器&lt;/span&gt;&lt;/font&gt;
&lt;p style="text-indent:10.5pt"&gt;&lt;span lang=EN-US&gt;&lt;font size=2&gt;{&lt;/font&gt;&lt;/span&gt;
&lt;p style="text-indent:10.5pt"&gt;&lt;span lang=EN-US&gt;&lt;font size=2&gt;&lt;span&gt;  &lt;/span&gt;get;&lt;/font&gt;&lt;/span&gt;
&lt;p style="text-indent:10.5pt"&gt;&lt;span lang=EN-US&gt;&lt;font size=2&gt;&lt;span&gt;  &lt;/span&gt;set;&lt;/font&gt;&lt;/span&gt;
&lt;p style="text-indent:10.5pt"&gt;&lt;span lang=EN-US&gt;&lt;font size=2&gt;} &lt;/font&gt;&lt;/span&gt;
&lt;p style="text-indent:10.5pt"&gt;&lt;font size=2&gt;&lt;span lang=EN-US&gt;event Change pricechange;&lt;span&gt;   &lt;/span&gt;//&lt;/span&gt;&lt;span style="font-family:宋体"&gt;定义接口的事件&lt;/span&gt;&lt;/font&gt;
&lt;p style=""&gt;&lt;span lang=EN-US&gt;&lt;font size=2&gt;}&lt;/font&gt;&lt;/span&gt;
&lt;p style=""&gt;&lt;span lang=EN-US&gt;&lt;font size=2&gt; &lt;/font&gt;&lt;/span&gt;
&lt;p style=""&gt;&lt;b&gt;&lt;font size=2&gt;&lt;span style="font-family:宋体"&gt;二．接口与抽象类&lt;/span&gt;&lt;span lang=EN-US&gt;&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;
&lt;p style=""&gt;&lt;font size=2&gt;&lt;b&gt;&lt;span lang=EN-US&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span lang=EN-US&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:宋体"&gt;抽象类和接口在定义上和功能上有很多相似的地方，具体在程序中使用抽象类还是接口需要比较抽象类和接口的具体差别。&lt;/span&gt;&lt;/font&gt;
&lt;p style=""&gt;&lt;span style="font-family:宋体"&gt;&lt;font size=2&gt;抽象类：一种不能实例化而必须从中继承的类，抽象类可以提供实现，也可以不提供实现&lt;/font&gt;&lt;/span&gt;
&lt;p style=""&gt;&lt;font size=2&gt;&lt;span lang=EN-US&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:宋体"&gt;子类只能从一个抽象类继承&lt;/span&gt;&lt;/font&gt;
&lt;p style=""&gt;&lt;font size=2&gt;&lt;span lang=EN-US&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:宋体"&gt;抽象类应主要用于关系密切的对象&lt;/span&gt;&lt;/font&gt;
&lt;p style=""&gt;&lt;font size=2&gt;&lt;span lang=EN-US&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:宋体"&gt;如果要设计大的功能单元，则使用抽象类。&lt;/span&gt;&lt;/font&gt;
&lt;p style=""&gt;&lt;font size=2&gt;&lt;span lang=EN-US&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:宋体"&gt;如果预计要创建组件的多个版本，则创建抽象类&lt;/span&gt;&lt;/font&gt;
&lt;p style=""&gt;&lt;span lang=EN-US&gt;&lt;font size=2&gt; &lt;/font&gt;&lt;/span&gt;
&lt;p style=""&gt;&lt;span style="font-family:宋体"&gt;&lt;font size=2&gt;接口：是完全抽象的成员集合，不提供认识实现。&lt;/font&gt;&lt;/span&gt;
&lt;p style="text-indent:32.25pt"&gt;&lt;span style="font-family:宋体"&gt;&lt;font size=2&gt;类或者结构可以继承几个接口。&lt;/font&gt;&lt;/span&gt;
&lt;p style="text-indent:32.25pt"&gt;&lt;span style="font-family:宋体"&gt;&lt;font size=2&gt;接口最适合为不相关的类提供通用功能&lt;/font&gt;&lt;/span&gt;
&lt;p style="text-indent:32.25pt"&gt;&lt;span style="font-family:宋体"&gt;&lt;font size=2&gt;如果要设计小而简练的功能块，则使用接口&lt;/font&gt;&lt;/span&gt;
&lt;p style="text-indent:32.25pt"&gt;&lt;span style="font-family:宋体"&gt;&lt;font size=2&gt;接口一旦创建就不能更改。如果需要接口的新版本，必须创建一个全新的接口&lt;/font&gt;&lt;/span&gt;
&lt;p style=""&gt;&lt;b&gt;&lt;font size=2&gt;&lt;span style="font-family:宋体"&gt;三．接口的的实现&lt;/span&gt;&lt;span lang=EN-US&gt;&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;
&lt;p style=""&gt;&lt;font size=2&gt;&lt;b&gt;&lt;span lang=EN-US&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span lang=EN-US&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:宋体"&gt;接口的实现分为：隐式实现和显式实现。如果类或者结构要实现的是单个接口，可以使用隐式实现，如果类或者结构继承了多个接口那么接口中相同名称成员就要显示实现。显示实现是通过使用接口的完全限定名来实现接口成员的。&lt;/span&gt;&lt;/font&gt;
&lt;p style=""&gt;&lt;font size=2&gt;&lt;span style="font-family:宋体"&gt;针对上面的例子&lt;/span&gt; &lt;span style="font-family:宋体"&gt;我们可以这样实现接口：&lt;/span&gt;&lt;/font&gt;
&lt;p style=""&gt;&lt;font size=2&gt;&lt;span lang=EN-US&gt;public class testInterface: Ibroker&lt;span&gt;  &lt;/span&gt;//&lt;/span&gt;&lt;span style="font-family:宋体"&gt;定义一个继承&lt;/span&gt;&lt;span lang=EN-US&gt;ibroker&lt;/span&gt;&lt;span style="font-family:宋体"&gt;接口的类&lt;/span&gt;&lt;/font&gt;
&lt;p style=""&gt;&lt;span lang=EN-US&gt;&lt;font size=2&gt;{&lt;/font&gt;&lt;/span&gt;
&lt;p style=""&gt;&lt;span lang=EN-US&gt;&lt;font size=2&gt;&lt;span&gt;  &lt;/span&gt;hashtable hash=new hashtable();&lt;/font&gt;&lt;/span&gt;
&lt;p style=""&gt;&lt;span lang=EN-US&gt;&lt;font size=2&gt;&lt;span&gt;  &lt;/span&gt;decimal pricepertrade;&lt;/font&gt;&lt;/span&gt;
&lt;p style=""&gt;&lt;font size=2&gt;&lt;span lang=EN-US&gt;&lt;span&gt;  &lt;/span&gt;public testInterface(decimal price)&lt;span&gt;   &lt;/span&gt;// &lt;/span&gt;&lt;span style="font-family:宋体"&gt;构造函数&lt;/span&gt;&lt;/font&gt;
&lt;p style=""&gt;&lt;span lang=EN-US&gt;&lt;font size=2&gt;&lt;span&gt;  &lt;/span&gt;{&lt;/font&gt;&lt;/span&gt;
&lt;p style=""&gt;&lt;font size=2&gt;&lt;span lang=EN-US&gt;&lt;span&gt;    &lt;/span&gt;pricepertrade=price ;&lt;span&gt;         &lt;/span&gt;&lt;span&gt;    &lt;/span&gt;//&lt;/span&gt;&lt;span style="font-family:宋体"&gt;初始化字符串&lt;/span&gt;&lt;/font&gt;
&lt;p style="text-indent:10.5pt"&gt;&lt;span lang=EN-US&gt;&lt;font size=2&gt;}&lt;/font&gt;&lt;/span&gt;
&lt;p style="text-indent:10.5pt"&gt;&lt;font size=2&gt;&lt;span lang=EN-US&gt;public string&lt;span&gt;  &lt;/span&gt;Getrating (string stock)&lt;span&gt;     &lt;/span&gt;//&lt;/span&gt;&lt;span style="font-family:宋体"&gt;隐式实现接口的方法&lt;/span&gt;&lt;/font&gt;
&lt;p style="text-indent:10.5pt"&gt;&lt;span lang=EN-US&gt;&lt;font size=2&gt;{&lt;/font&gt;&lt;/span&gt;
&lt;p style="text-indent:10.5pt"&gt;&lt;span lang=EN-US&gt;&lt;font size=2&gt;&lt;span&gt;   &lt;/span&gt;return “buy”;&lt;/font&gt;&lt;/span&gt;
&lt;p style="text-indent:10.5pt"&gt;&lt;span lang=EN-US&gt;&lt;font size=2&gt;}&lt;/font&gt;&lt;/span&gt;
&lt;p style="text-indent:10.5pt"&gt;&lt;font size=2&gt;&lt;span lang=EN-US&gt;public decimal Ibroker.pricepertrade //&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:宋体"&gt;显式实现接口的特性&lt;/span&gt;&lt;/font&gt;
&lt;p style="text-indent:10.5pt"&gt;&lt;span lang=EN-US&gt;&lt;font size=2&gt;{&lt;/font&gt;&lt;/span&gt;
&lt;p style="text-indent:10.5pt"&gt;&lt;span lang=EN-US&gt;&lt;font size=2&gt;&lt;span&gt;  &lt;/span&gt;get &lt;/font&gt;&lt;/span&gt;
&lt;p style="text-indent:31.5pt"&gt;&lt;span lang=EN-US&gt;&lt;font size=2&gt;{&lt;/font&gt;&lt;/span&gt;
&lt;p style="text-indent:31.5pt"&gt;&lt;span lang=EN-US&gt;&lt;font size=2&gt;&lt;span&gt;  &lt;/span&gt;return pricepertrade;&lt;/font&gt;&lt;/span&gt;
&lt;p style="text-indent:31.5pt"&gt;&lt;span lang=EN-US&gt;&lt;font size=2&gt;}&lt;/font&gt;&lt;/span&gt;
&lt;p style="text-indent:21pt"&gt;&lt;span lang=EN-US&gt;&lt;font size=2&gt;set &lt;/font&gt;&lt;/span&gt;
&lt;p style="text-indent:21pt"&gt;&lt;span lang=EN-US&gt;&lt;font size=2&gt;{&lt;/font&gt;&lt;/span&gt;
&lt;p style="text-indent:21pt"&gt;&lt;span lang=EN-US&gt;&lt;font size=2&gt;&lt;span&gt;  &lt;/span&gt;pricepertrade=value;&lt;/font&gt;&lt;/span&gt;
&lt;p style="text-indent:31.5pt"&gt;&lt;span lang=EN-US&gt;&lt;font size=2&gt;pricechange(“Finacebroker”,value);&lt;/font&gt;&lt;/span&gt;
&lt;p style="text-indent:21pt"&gt;&lt;span lang=EN-US&gt;&lt;font size=2&gt;}&lt;/font&gt;&lt;/span&gt;
&lt;p style="text-indent:21pt"&gt;&lt;span lang=EN-US&gt;&lt;font size=2&gt; &lt;/font&gt;&lt;/span&gt;
&lt;p style="text-indent:21pt"&gt;&lt;span lang=EN-US&gt;&lt;font size=2&gt;public decimal this(string stockName)&lt;/font&gt;&lt;/span&gt;
&lt;p style="text-indent:21pt"&gt;&lt;span lang=EN-US&gt;&lt;font size=2&gt;{&lt;/font&gt;&lt;/span&gt;
&lt;p style="text-indent:21pt"&gt;&lt;span lang=EN-US&gt;&lt;font size=2&gt;&lt;span&gt;  &lt;/span&gt;get &lt;/font&gt;&lt;/span&gt;
&lt;p style="text-indent:31.5pt"&gt;&lt;span lang=EN-US&gt;&lt;font size=2&gt;{&lt;/font&gt;&lt;/span&gt;
&lt;p style="text-indent:31.5pt"&gt;&lt;span lang=EN-US&gt;&lt;font size=2&gt;&lt;span&gt;  &lt;/span&gt;return (decimal)Hash[stockName];&lt;/font&gt;&lt;/span&gt;
&lt;p style="text-indent:31.5pt"&gt;&lt;span lang=EN-US&gt;&lt;font size=2&gt;}&lt;/font&gt;&lt;/span&gt;
&lt;p style="text-indent:31.5pt"&gt;&lt;span lang=EN-US&gt;&lt;font size=2&gt;set &lt;/font&gt;&lt;/span&gt;
&lt;p style="text-indent:31.5pt"&gt;&lt;span lang=EN-US&gt;&lt;font size=2&gt;&lt;span&gt; &lt;/span&gt;{&lt;/font&gt;&lt;/span&gt;
&lt;p style="text-indent:31.5pt"&gt;&lt;span lang=EN-US&gt;&lt;font size=2&gt;&lt;span&gt;   &lt;/span&gt;hash.add(stockname,value);&lt;/font&gt;&lt;/span&gt;
&lt;p style="text-indent:31.5pt"&gt;&lt;span lang=EN-US&gt;&lt;font size=2&gt;}&lt;/font&gt;&lt;/span&gt;
&lt;p style="text-indent:21pt"&gt;&lt;span lang=EN-US&gt;&lt;font size=2&gt;}&lt;/font&gt;&lt;/span&gt;
&lt;p style="text-indent:10.5pt"&gt;&lt;span lang=EN-US&gt;&lt;font size=2&gt;}&lt;/font&gt;&lt;/span&gt;
&lt;p style="text-indent:10.5pt"&gt;&lt;font size=2&gt;&lt;span lang=EN-US&gt;public event changer pricechange;//&lt;/span&gt;&lt;span style="font-family:宋体"&gt;接口中的所有成员都要实现&lt;/span&gt;&lt;/font&gt;
&lt;p style=""&gt;&lt;span lang=EN-US&gt;&lt;font size=2&gt;}&lt;/font&gt;&lt;/span&gt;
&lt;p style=""&gt;&lt;b&gt;&lt;font size=2&gt;&lt;span style="font-family:宋体"&gt;四．接口中的多态&lt;/span&gt;&lt;span lang=EN-US&gt;&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;
&lt;p style=""&gt;&lt;font size=2&gt;&lt;span lang=EN-US&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:宋体"&gt;多个类继承了相同的接口就实现了接口的多态性，接口的多态性的访问和类的多态性访问一样。下面的例子说明怎么实现接口的多态性访问：&lt;/span&gt;&lt;/font&gt;
&lt;p style=""&gt;&lt;span lang=EN-US&gt;&lt;font size=2&gt;public class InterfaceTester&lt;/font&gt;&lt;/span&gt;
&lt;p style=""&gt;&lt;span lang=EN-US&gt;&lt;font size=2&gt;{&lt;/font&gt;&lt;/span&gt;
&lt;p style=""&gt;&lt;span lang=EN-US&gt;&lt;font size=2&gt;&lt;span&gt;  &lt;/span&gt;public stratic int Main (string[] args)&lt;/font&gt;&lt;/span&gt;
&lt;p style=""&gt;&lt;span lang=EN-US&gt;&lt;font size=2&gt;&lt;span&gt;  &lt;/span&gt;{&lt;/font&gt;&lt;/span&gt;
&lt;p style="text-indent:21pt"&gt;&lt;span lang=EN-US&gt;&lt;font size=2&gt;string recommendation;&lt;/font&gt;&lt;/span&gt;
&lt;p style="text-indent:21pt"&gt;&lt;font size=2&gt;&lt;span lang=EN-US&gt;Arraylist Brokers=new Arraylist;//&lt;/span&gt;&lt;span style="font-family:宋体"&gt;定义一个列表&lt;/span&gt;&lt;/font&gt;
&lt;p style="text-indent:21pt"&gt;&lt;font size=2&gt;&lt;span lang=EN-US&gt;Brokers.add(new&lt;span&gt;  &lt;/span&gt;firstBroker(7.21m));//&lt;/span&gt;&lt;span style="font-family:宋体"&gt;添加第一个继承接口的类&lt;/span&gt;&lt;/font&gt;
&lt;p style="text-indent:21pt"&gt;&lt;font size=2&gt;&lt;span lang=EN-US&gt;Brokers.add(new&lt;span&gt;  &lt;/span&gt;secondBroker(12.3m));// &lt;/span&gt;&lt;span style="font-family:宋体"&gt;添加第二个继承接口的类&lt;/span&gt;&lt;/font&gt;
&lt;p style="text-indent:21pt"&gt;&lt;span lang=EN-US&gt;&lt;font size=2&gt;InterfacetTester new Iftst=new InterfacetTester&lt;/font&gt;&lt;/span&gt;
&lt;p style="text-indent:21pt"&gt;&lt;span lang=EN-US&gt;&lt;font size=2&gt;Foreach (Ibroker broker in Brokers)&lt;/font&gt;&lt;/span&gt;
&lt;p style="text-indent:21pt"&gt;&lt;span lang=EN-US&gt;&lt;font size=2&gt;{&lt;/font&gt;&lt;/span&gt;
&lt;p style="text-indent:21pt"&gt;&lt;span lang=EN-US&gt;&lt;font size=2&gt;&lt;span&gt;   &lt;/span&gt;broker.pricechange+=new change(iftst.pricepertradechange);&lt;/font&gt;&lt;/span&gt;
&lt;p style="text-indent:21pt"&gt;&lt;span lang=EN-US&gt;&lt;font size=2&gt;&lt;span&gt;   &lt;/span&gt;broker[“adc”]=12.33m;&lt;/font&gt;&lt;/span&gt;
&lt;p style="text-indent:21pt"&gt;&lt;span lang=EN-US&gt;&lt;font size=2&gt;&lt;span&gt;   &lt;/span&gt;broker[“rty”]=11.23ml&lt;/font&gt;&lt;/span&gt;
&lt;p style="text-indent:21pt"&gt;&lt;span lang=EN-US&gt;&lt;font size=2&gt;&lt;span&gt;   &lt;/span&gt;broker.pricepertrade=12.55m;&lt;/font&gt;&lt;/span&gt;
&lt;p style="text-indent:21pt"&gt;&lt;span lang=EN-US&gt;&lt;font size=2&gt;}&lt;/font&gt;&lt;/span&gt;
&lt;p style="text-indent:10.5pt"&gt;&lt;span lang=EN-US&gt;&lt;font size=2&gt;}&lt;/font&gt;&lt;/span&gt;
&lt;p style=""&gt;&lt;span lang=EN-US&gt;&lt;font size=2&gt;}&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=6364383383296229302&amp;page=RSS%3a+C%23+%e4%b8%ad%e7%9a%84%e6%8e%a5%e5%8f%a3%e4%b8%8e%e6%8a%bd%e8%b1%a1%e7%b1%bb&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=ruanqizhen.spaces.live.com&amp;amp;GT1=ruanqizhen"&gt;</description><comments>http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1102.entry#comment</comments><guid isPermaLink="true">http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1102.entry</guid><pubDate>Thu, 17 Nov 2005 06:53:29 GMT</pubDate><slash:comments>2</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://ruanqizhen.spaces.live.com/blog/cns!5852D4F797C53FB6!1102/comments/feed.rss</wfw:commentRss><wfw:comment>http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1102.entry#comment</wfw:comment><dcterms:modified>2005-11-17T06:53:29Z</dcterms:modified></item><item><title>Windows Live Messenger</title><link>http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1091.entry</link><description>&lt;div&gt; &lt;span style="font-size:12px"&gt;Windows Live Messenger是最新的 MSN 的新名字,这张登陆图片是从MSN 测试人员日志中释放出来的.&lt;br&gt;&lt;img src="http://storage.msn.com/x1pc_jqddVOWRngXwwLx6hYTIiXlGRXRVvZOfhzXnmU1rs5sGjo3ZbFcmB9Nh9yuKJP7ehO8RAYegbotg8M0Di1EAJ21-Vt4k8enk4N1NuAlPyuhAaVAVmrW_lx-7z-2Rml" border=0&gt;&lt;br&gt;&lt;img src="http://8ie.cn/upload/mess-1.jpg" border=0&gt; &lt;br&gt;&lt;img src="http://8ie.cn/upload/mess-2.jpg" border=0&gt;&lt;/span&gt; &lt;/div&gt;
&lt;p&gt; 
&lt;p&gt; 
&lt;p&gt;　　&lt;span style="font-size:12px"&gt;官方的下载已经出了.这是最新版本的 MSN Messenger.名字是新的,但是您的联系人列表、表情图释以及您以前的所有信息都不会丢失.此外,还有两种新方式可以共享照片与其他内容,并&lt;br&gt;通过文本、声音、视频以及 PC 到 PC 呼叫联系您的朋友.&lt;/span&gt;&lt;span style="font-size:12px"&gt;
&lt;p&gt;&lt;br&gt;&lt;strong&gt;Windows Live Messenger Beta FAQ: &lt;/strong&gt; 
&lt;p&gt;&lt;br&gt;什么是语音呼叫？它怎样工作？&lt;br&gt;　　您可以免费进行 PC 到 PC 的呼叫，前提是您和您的 Messenger 联系人都有兼容的扬声器和麦克风（或耳机）。  
&lt;p&gt;&lt;br&gt;什么是共享文件夹？&lt;br&gt;　　共享文件夹是您与您的 Messenger 联系人共享个人照片、文档和文件的最新和最简单的途径。您可以通过向您的 Messenger 联系人名称拖拽文件轻松建立共享文件夹。这将在您和您的联系人&lt;br&gt;的计算机上创建一个此文件的副本，并创建从 Messenger 和桌面都可以访问的共享文件夹。 
&lt;p&gt; &lt;br&gt;我已经可以用电子邮件共享文档了。共享文件夹的好处是什么？&lt;br&gt;　　共享文件夹比起用电子邮件共享照片和文档更容易。在共享文件夹里，无论何时添加、修改、删&lt;br&gt;除文件，都将和与您共享的人同步这些更改。在共享文件更改时，Messenger 中的共享文件图标也将向您闪烁，提示文件更新。只需拖放即可共享文件，甚至比您在 Messenger 中熟悉的发送文件和另存为功能更简单。&lt;br&gt;　　共享文件夹很像您熟悉的 Windows 文件夹，所以很好使用。就像在 Windows 中一样，您可以拖放、使用不同文件视图、拷贝、粘贴等等。您可以从桌面访问共享文件夹，所以在联机和脱机时都可以管理文件。共享文件夹不需要配置或设置，即可实现文件同步。  
&lt;p&gt;&lt;br&gt;共享文件夹是否安全？&lt;br&gt;　　共享文件夹将自动使用计算机上现有的防病毒程序扫描病毒并通知用户。  
&lt;p&gt;&lt;br&gt;可以告诉我关于视频对话的更多信息吗？&lt;br&gt;　　好的，首先，它已经改进了：现在您可以得到声音同步的、实时、全屏的 (640x480) 的视频。它只会比旧的科幻小说中的电视电话更好。您和您的联系人需要兼容的网络摄像机、麦克风和扬声器（或耳机）。
&lt;p&gt;  &lt;br&gt;那很好，但是是否可以只要即时消息？&lt;br&gt;　　我们无处不在。Windows Live Messenger 仍然提供包括自定义字体、动态动漫传情、白板和其他许多的即时文本聊天。同时，您的 Hotmail 联系人列表也可以通过 Messenger 访问，您也可以看到谁最近更新了他的共享空间网络日志&amp;amp;mdash;&amp;amp;mdash;通过名字旁边的闪烁图标。  
&lt;p&gt;&lt;br&gt;  下载：&lt;a href="http://g.msn.com/1csbeta/Mess80_EN"&gt;Windows Live Messenger Beta&lt;/a&gt;&lt;br&gt;  访问：&lt;a href="http://spaces.msn.com/members/MessengerSays"&gt;Windows Live Messenger 官方网络日志&lt;/a&gt;  &lt;br&gt;       &lt;/span&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=6364383383296229302&amp;page=RSS%3a+Windows+Live+Messenger&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=ruanqizhen.spaces.live.com&amp;amp;GT1=ruanqizhen"&gt;</description><comments>http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1091.entry#comment</comments><guid isPermaLink="true">http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1091.entry</guid><pubDate>Mon, 14 Nov 2005 13:15:07 GMT</pubDate><slash:comments>2</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://ruanqizhen.spaces.live.com/blog/cns!5852D4F797C53FB6!1091/comments/feed.rss</wfw:commentRss><wfw:comment>http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1091.entry#comment</wfw:comment><dcterms:modified>2005-11-14T13:15:07Z</dcterms:modified></item><item><title>Google喜欢静态网页</title><link>http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!1006.entry</link><description>&lt;div