<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_Haozes's Tech Space</title><subtitle type="text">人類的全部才能無非是時間和耐心的混合物 </subtitle><id>http://feed.cnblogs.com/blog/u/21954/rss</id><updated>2012-02-06T02:31:06Z</updated><author><name>Haozes</name><uri>http://www.cnblogs.com/solo/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/solo/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/21954/rss"/><entry><id>http://www.cnblogs.com/solo/archive/2012/02/06/2339636.html</id><title type="text">WPF 多语言方案</title><summary type="text">SourceCode:http://files.cnblogs.com/solo/WpfLocalizeTest.zip简介:MSDN 推荐了一个WPF多语言方案--使用Locbaml,是个半成品,而且也不够灵活.此多语方案修改自:http://www.codeproject.com/Articles/35159/WPF-Localization-Using-RESX-Files该解决方案:使用WPF 扩展标记,运行时读取Resx Files内容.Design Mode的设计时支持使用Weak Reference 缓存因为项目需求,我拓展了该代码,增加了功能:加了个内容的Provider接口可</summary><published>2012-02-06T02:28:00Z</published><updated>2012-02-06T02:28:00Z</updated><author><name>Haozes</name><uri>http://www.cnblogs.com/solo/</uri></author><link rel="alternate" href="http://www.cnblogs.com/solo/archive/2012/02/06/2339636.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/solo/archive/2012/02/06/2339636.html"/><content type="html">&lt;div&gt;&lt;strong&gt;SourceCode:&lt;/strong&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;a href="http://files.cnblogs.com/solo/WpfLocalizeTest.zip"&gt;&lt;strong&gt;http://files.cnblogs.com/solo/WpfLocalizeTest.zip&lt;/strong&gt;&lt;/a&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;strong&gt;&lt;br  /&gt;简介:&lt;/strong&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;MSDN 推荐了一个WPF多语言方案--使用&lt;span&gt;Locbaml&lt;/span&gt;&lt;span&gt;&amp;nbsp;,是个半成品,而且也不够灵活.&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span&gt;此多语方案修改自:&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;a id="" href="http://www.codeproject.com/Articles/35159/WPF-Localization-Using-RESX-Files" target="_blank"&gt;http://www.codeproject.com/Articles/35159/WPF-Localization-Using-RESX-Files&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;该解决方案:&lt;/div&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;使用WPF 扩展标记,运行时读取Resx Files内容.&lt;/li&gt;&#xD;
&lt;li&gt;Design Mode的设计时支持&lt;/li&gt;&#xD;
&lt;li&gt;使用Weak Reference 缓存&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;因为项目需求,我拓展了该代码,增加了功能:&lt;/div&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;加了个内容的Provider接口可使用Resx File和XML等提供多语言内容&lt;/li&gt;&#xD;
&lt;li&gt;设计时错误提示&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;strong&gt;1.使用方式:&lt;/strong&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;在XAML 中使用:以字符串和 图片为例:&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
&lt;pre&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;TextBlock&lt;/span&gt; &lt;span&gt;Height&lt;/span&gt;&lt;span&gt;="23"&lt;/span&gt; &lt;span&gt;HorizontalAlignment&lt;/span&gt;&lt;span&gt;="Left"&lt;/span&gt; &lt;span&gt;Margin&lt;/span&gt;&lt;span&gt;="98,24,0,0"&lt;/span&gt; &lt;span&gt;Name&lt;/span&gt;&lt;span&gt;="textBlock1"&lt;/span&gt;          &#xD;
&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span&gt;Text&lt;/span&gt;&lt;span&gt;&lt;span style="color: #0000ff;"&gt;="&lt;/span&gt;&lt;strong&gt;&lt;span style="color: #328712;"&gt;{Resx Node={x:Static e:MainWindow.ThemeNode}, Key=lbltxt}&lt;/span&gt;&lt;/strong&gt;&lt;span style="color: #0000ff;"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span&gt;VerticalAlignment&lt;/span&gt;&lt;span&gt;="Top"&lt;/span&gt;&lt;span&gt;Width&lt;/span&gt;&lt;span&gt;="199"&lt;/span&gt;&lt;span&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;Image&lt;/span&gt; &lt;span&gt;Height&lt;/span&gt;&lt;span&gt;="150"&lt;/span&gt; &lt;span&gt;HorizontalAlignment&lt;/span&gt;&lt;span&gt;="Left"&lt;/span&gt; &lt;span&gt;Margin&lt;/span&gt;&lt;span&gt;="98,87,0,0"&lt;/span&gt; &lt;span&gt;Name&lt;/span&gt;&lt;span&gt;="image1"&lt;/span&gt; &lt;span&gt;Stretch&lt;/span&gt;&lt;span&gt;="Fill"&lt;/span&gt; &lt;span&gt;VerticalAlignment&lt;/span&gt;&lt;span&gt;="Top"&lt;/span&gt; &lt;span&gt;Width&lt;/span&gt;&lt;span&gt;="251"&lt;/span&gt;      &#xD;
&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span&gt;Source&lt;/span&gt;&lt;span&gt;="&lt;/span&gt;&lt;span&gt;&lt;span style="color: #328712;"&gt;&lt;strong&gt;{Resx Node=WpfLocalizeTest.MainWindow, Key=flag}&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;&lt;span&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;在代码中使用:&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
&lt;pre&gt;ResManager.Instance.GetResource(nodename, key);&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;Theme文件夹结构:&lt;/div&gt;&#xD;
&lt;div&gt;en-us 为theme名称. WpfLocalizeTest是程序集文件名,下面Resource.xml为 多语言资源文件&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/18395/2012020610303942.jpg" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;Resource.xml:&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
&lt;pre&gt;&amp;lt;?&lt;span&gt;xml&lt;/span&gt; &lt;span&gt;version&lt;/span&gt;&lt;span&gt;="1.0"&lt;/span&gt; &lt;span&gt;encoding&lt;/span&gt;&lt;span&gt;="UTF-8"&lt;/span&gt;?&amp;gt;&#xD;
&lt;/pre&gt;&#xD;
&lt;pre&gt;&amp;lt;&lt;span&gt;res&lt;/span&gt;&amp;gt;    &#xD;
&lt;/pre&gt;&#xD;
&lt;pre&gt;&amp;lt;&lt;span&gt;node&lt;/span&gt; &lt;span&gt;name&lt;/span&gt;&lt;span&gt;="MainWindow"&lt;/span&gt;&amp;gt;&#xD;
&lt;/pre&gt;&#xD;
&lt;pre&gt;&amp;lt;&lt;span&gt;item&lt;/span&gt; &lt;span&gt;key&lt;/span&gt;&lt;span&gt;="lbltxt"&lt;/span&gt; &lt;span&gt;type&lt;/span&gt;&lt;span&gt;="string"&lt;/span&gt; &lt;span&gt;des&lt;/span&gt;&lt;span&gt;="这是注释"&lt;/span&gt; &lt;span&gt;value&lt;/span&gt;&lt;span&gt;="这是中文界面"&lt;/span&gt;/&amp;gt;        &#xD;
&lt;/pre&gt;&#xD;
&lt;pre&gt;&amp;lt;&lt;span&gt;item&lt;/span&gt; &lt;span&gt;key&lt;/span&gt;&lt;span&gt;="flag"&lt;/span&gt; &lt;span&gt;type&lt;/span&gt;&lt;span&gt;="image"&lt;/span&gt;  &lt;span&gt;des&lt;/span&gt;&lt;span&gt;="这是注释"&lt;/span&gt; &lt;span&gt;value&lt;/span&gt;&lt;span&gt;="flag.jpg"&lt;/span&gt;/&amp;gt;    &#xD;
&lt;/pre&gt;&#xD;
&lt;pre&gt;&amp;lt;/&lt;span&gt;node&lt;/span&gt;&amp;gt;&#xD;
&lt;/pre&gt;&#xD;
&lt;pre&gt;&amp;lt;/&lt;span&gt;res&lt;/span&gt;&amp;gt;&#xD;
&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div&gt;&lt;strong&gt;Resx&amp;nbsp;&lt;/strong&gt;为扩展标记,其中Node为人为约定&amp;nbsp;&amp;nbsp;:&lt;span style="color: #328712;"&gt;WpfLocalizeTest.MainWindow&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span style="color: #328712;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span&gt;前半部分&lt;strong&gt;WpfLocalizeTest&lt;/strong&gt;&amp;nbsp;是当前dll或exe 程序集文件名称.&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span&gt;后面部分&amp;nbsp;&lt;strong&gt;MainWinow&lt;/strong&gt;是 xml结点名称(也可以没有,如果没有的话,item直接存放在res结点下.).&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span&gt;为方便,可以用类似&lt;/span&gt;&lt;span&gt;&lt;strong&gt;{x:Static&amp;nbsp;&lt;a id="" href="file:///E:/MainWindow.ThemeNode%7D" target="_blank"&gt;e:MainWindow.ThemeNode}&lt;/a&gt;&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&amp;nbsp;&lt;span&gt;,具体看代码.&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;strong&gt;2.设计时支持:&lt;/strong&gt;&lt;/div&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;&lt;span&gt;&lt;strong&gt;动态切换&lt;/strong&gt;: 在Design 模式时,有个地球托盘图标,使用它可以切换theme,并在Design 时看到效果.&lt;br /&gt;&lt;/span&gt;&#xD;
&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;(此处有个问题:需要写死设计时的路径.有没有更好的方法在设计时获取到文件路径?)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;div&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/18395/2012020610291335.png" alt="" /&gt;&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;&lt;strong&gt;错误提示&lt;/strong&gt;: 如果在xml没有配置该相应的key.设计时Error窗口会提示报错:(示例中不存在MainWindow1 的node)&lt;/li&gt;&#xD;
&lt;li&gt;&lt;br /&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/18395/2012020610310568.jpg" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/solo/aggbug/2339636.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/solo/archive/2012/02/06/2339636.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/solo/archive/2011/09/27/2193360.html</id><title type="text">.Net 2 Tip :捕获CSE和Thread.Timer与Thread.Sleep比较</title><summary type="text">在.Net如何捕获AccessViolationException在.net4.0 中,系统某些SEH异常默认是不被捕获的,该类异常称作Corrupted State Exceptions (CSE)比如:调用非托管代码时,常常会出现此类错误,如&amp;quot;内存不可读/写&amp;quot;.MS的MSDN有篇文章详细介绍了CSE异常:http://msdn.microsoft.com/en-us/magazine/dd419661.aspx#id0070035MS不推荐,捕获此类异常,因为此类异常不解决,应用可能会导致更严重的错误.建议重启该应用程序.出现此类异常的原因,往往需要解决.而不是简单的的</summary><published>2011-09-27T09:23:00Z</published><updated>2011-09-27T09:23:00Z</updated><author><name>Haozes</name><uri>http://www.cnblogs.com/solo/</uri></author><link rel="alternate" href="http://www.cnblogs.com/solo/archive/2011/09/27/2193360.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/solo/archive/2011/09/27/2193360.html"/><content type="html">&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;ul&gt;&#xD;
&lt;li style="font-family: Simsun; line-height: normal; font-size: medium;"&gt;在.Net如何捕获&amp;nbsp;AccessViolationException&lt;br /&gt;在.net4.0 中,系统某些SEH异常默认是不被捕获的,该类异常称作&lt;span style="font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif; font-size: 14px; line-height: 18px; text-align: left;"&gt;Corrupted State Exceptions (CSE)&lt;br /&gt;&lt;/span&gt;比如:调用非托管代码时,常常会出现此类错误,如"内存不可读/写".&lt;br /&gt;MS的MSDN有篇文章详细介绍了CSE异常:&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/magazine/dd419661.aspx#id0070035" target="_blank"&gt;http://msdn.microsoft.com/en-us/magazine/dd419661.aspx#id0070035&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;MS不推荐,捕获此类异常,因为此类异常不解决,应用可能会导致更严重的错误.建议重启该应用程序.出现此类异常的原因,往往需要解决.而不是简单的的捕获.所以.NET4.0中不让捕了(早干啥去了,到.NET才这样处理).但有些时候,我们的确要捕获此类异常,或者说调用的是第三方的库.我们根本无法彻底解决这种问题. .NET4.0 提供了如下的方法捕获:&lt;br /&gt;&lt;br /&gt;&lt;span color="#147191" style="color: #147191;"&gt;// This program runs as part of an automated test system so you need&lt;br /&gt;// to prevent the normal Unhandled Exception behavior (Watson dialog).&lt;br /&gt;// Instead, print out any exceptions and exit with an error code.&lt;br /&gt;[HandleProcessCorruptedStateExceptions]&lt;br /&gt;public static int Main()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; try&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Catch any exceptions leaking out of the program CallMainProgramLoop();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp; catch (Exception e)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // We could be catching anything here&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // The exception we caught could have been a program error&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // or something much more serious. Regardless, we know that&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // something is not right. We'll just output the exception&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // and exit with an error. We won't try to do any work when&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // the program or process is in an unknown state!&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Console.WriteLine(e.Message);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp; return 0;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li style="font-family: Simsun; line-height: normal; font-size: medium;"&gt;使用Timer还是Thread.Sleep&lt;br /&gt;当你需要间隔一段时间执行一个方法时.你是否在方法1,和方法2中悱徊?&lt;br /&gt;&lt;span color="#147191" style="color: #147191;"&gt;方法1.&lt;/span&gt;&lt;br /&gt;&lt;span color="#147191" style="color: #147191;"&gt;Thread thread = new Thread(() =&amp;gt; {&lt;/span&gt;&lt;br /&gt;&lt;span color="#147191" style="color: #147191;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Thread.Sleep(millisecond);&lt;/span&gt;&lt;br /&gt;&lt;span color="#147191" style="color: #147191;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; action();&lt;/span&gt;&lt;br /&gt;&lt;span color="#147191" style="color: #147191;"&gt;});&lt;/span&gt;&lt;br /&gt;&lt;span color="#147191" style="color: #147191;"&gt;thread.IsBackground = true;&lt;/span&gt;&lt;br /&gt;&lt;span color="#147191" style="color: #147191;"&gt;thread.Start();&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span color="#147191" style="color: #147191;"&gt;方法2:&lt;/span&gt;&lt;br /&gt;&lt;span color="#147191" style="color: #147191;"&gt;Timer timer = new Timer(o =&amp;gt; action(), null, millisecond, -1);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;如果你仅仅是需要间断一段时间执行一个方法.推荐使用timer.&lt;br /&gt;下面MS MVP 严重批评了使用Thread.Sleep.&lt;br /&gt;&lt;a href="http://msmvps.com/blogs/peterritchie/archive/2007/04/26/thread-sleep-is-a-sign-of-a-poorly-designed-program.aspx" target="_blank"&gt;http://msmvps.com/blogs/peterritchie/archive/2007/04/26/thread-sleep-is-a-sign-of-a-poorly-designed-program.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;此人认为如果你在代码中使用thread.sleep.说明该代码设计是糟糕的.&lt;b&gt;Thread.Sleep 的应用场景只有在测试和Debug时需要模拟一个操作的执行时间.&lt;/b&gt;&lt;br /&gt;1). 使用Thread的开销很大,大概需要200,000 cpu周期去创建一个线程, 100,000 个周期去销毁.timer的方法是进程内部的线程池的线程.这也是使用&amp;nbsp;ThreadPool.QueueUserWorkItem优于new 一个thread的地方.&lt;br /&gt;2).thread.sleep 无法解决问题,只会让问题更难以重现.&lt;br /&gt;2).其次创建一个线程后,比如关闭窗体,这个线程在退出时需要显示强行退出.也很不方便.相反使用timer&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;/p&gt;&lt;img src="http://www.cnblogs.com/solo/aggbug/2193360.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/solo/archive/2011/09/27/2193360.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/solo/archive/2011/09/27/2193343.html</id><title type="text">使用Python操作MSSQL数据库.</title><summary type="text">有时想更新或迁移部分SqlServer数据,用SQL只会整几句select,高级点的连个游标都玩不转有木有?拿起VS写个小程序不停的改又编译很烦,有木有?想用脚本写了有木有?本文介绍使用python,adodbapi操作数据库:adodbapi 库python 可以操作mssqlserver的类库有几个,支持python3.x的目前没几个靠谱的.adodbapi是使用ADO操作的.(不能跨平台?需要么?)所以首先要安装Python for Windows extensions,有了pywin32这个扩展可以做很多事,用它操作EXCEL等,甚至比VBScript还要简洁如:&amp;#39;&amp;#39;&amp;</summary><published>2011-09-27T09:13:00Z</published><updated>2011-09-27T09:13:00Z</updated><author><name>Haozes</name><uri>http://www.cnblogs.com/solo/</uri></author><link rel="alternate" href="http://www.cnblogs.com/solo/archive/2011/09/27/2193343.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/solo/archive/2011/09/27/2193343.html"/><content type="html">&lt;p&gt;&lt;span style="border-collapse: separate; font-family: Tahoma; line-height: normal; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; font-size: medium;"&gt;有时想更新或迁移部分SqlServer数据,用SQL只会整几句select,高级点的连个游标都玩不转有木有?拿起VS写个小程序不停的改又编译很烦,有木有?&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;div&gt;&lt;span style="border-collapse: separate; font-family: Tahoma; line-height: normal; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; font-size: medium;"&gt;想用脚本写了有木有?&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span style="border-collapse: separate; font-family: Tahoma; line-height: normal; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span style="border-collapse: separate; font-family: Tahoma; line-height: normal; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; font-size: medium;"&gt;本文介绍使用python,&lt;b&gt;adodbapi&lt;/b&gt;操作数据库:&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span style="border-collapse: separate; font-family: Tahoma; line-height: normal; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div style="font-size: 16px;"&gt;&lt;span style="border-collapse: separate; font-family: Tahoma; line-height: normal; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; font-size: medium;"&gt;&lt;span style="border-collapse: separate; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px;"&gt;&lt;b&gt;adodbapi 库&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;python 可以操作mssqlserver的类库有几个,支持python3.x的目前没几个靠谱的.&lt;a href="http://sourceforge.net/projects/adodbapi"&gt;adodbapi&lt;/a&gt;是使用ADO操作的.(不能跨平台?需要么?)&lt;/div&gt;&#xD;
&lt;div&gt;所以首先要安装&amp;nbsp;&#xD;
&lt;h2 style="border-style: initial; border-color: initial; outline-width: 0px; outline-style: initial; outline-color: initial; font-size: 18px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; font-weight: normal; text-rendering: optimizelegibility; font-family: Ubuntu, sans-serif; line-height: 36px; display: inline; border-width: 0px; padding: 0px; margin: 0px;"&gt;&lt;a href="http://sourceforge.net/projects/pywin32/"&gt;&lt;span style="border-collapse: separate; color: #000000; font-family: Simsun; font-size: 16px; line-height: normal; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none;"&gt;Python for Windows extensions&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;a href="http://sourceforge.net/projects/pywin32/"&gt;&lt;span style="border-collapse: separate; color: #000000; font-family: Simsun; font-size: 16px; line-height: normal; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/a&gt;&lt;span face="Simsun" size="4" style="font-family: Simsun; font-size: medium;"&gt;,&lt;/span&gt;有了pywin32这个扩展可以做很多事,用它操作EXCEL等,甚至比VBScript还要简洁&lt;/div&gt;&#xD;
&lt;div&gt;如:&lt;/div&gt;&#xD;
&lt;div&gt;'''&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span color="#147191" style="color: #147191;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.xlBook=self.xlApp.Workbooks.Open(filename)&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span color="#147191" style="color: #147191;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; sht = self.xlBook.Worksheets(sheet)&amp;nbsp; &amp;nbsp;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;sht.Cells(row, col).Value = value&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;'''&lt;/div&gt;&#xD;
&lt;div&gt;&lt;/div&gt;&#xD;
&lt;div style="font-size: 16px;"&gt;&lt;b&gt;详细过程:&lt;/b&gt;&lt;/div&gt;&#xD;
&lt;div style="font-size: 16px;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&#xD;
&lt;div style="font-size: 16px;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;b&gt;首先添加引用:&lt;/b&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span color="#147191" style="color: #147191;"&gt;import adodbapi&lt;br /&gt;&#xD;
adodbapi.adodbapi.verbose = False # adds details to the sample printout&lt;br /&gt;&#xD;
import adodbapi.ado_consts as adc&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;b&gt;创建连接:&lt;/b&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span color="#147191" style="color: #147191;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;Cfg={'server':'192.168.29.86\\eclexpress','password':'xxxx','db':'pscitemp'}&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp; constr = r"Provider=SQLOLEDB.1; Initial Catalog=%s; Data Source=%s; user ID=%s; Password=%s; " \&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % (Cfg['db'], Cfg['server'], 'sa', Cfg['password'])&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp; &amp;nbsp;conn=adodbapi.connect(constr)&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;/div&gt;&#xD;
&lt;div&gt;其中Cfg是个key-value字典,constr格式化语法是python2.x常用,在3.x可以使用下面的.&lt;/div&gt;&#xD;
&lt;div&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;b&gt;执行sql语句:&lt;/b&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span color="#1A90B9" style="color: #1a90b9;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;cur=conn.cursor()&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp; sql='''select * from softextBook where title='{0}' and remark3!='{1}'&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp; '''.format(bookName,flag)&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp; cur.execute(sql)&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span color="#1A90B9" style="color: #1a90b9;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; data=cur.fetchall()&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp; cur.close()&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;/div&gt;&#xD;
&lt;div&gt;其中三个引号类似于C#字符串前的"@",python中字符串可以用一个或两个,三个括起来,format格式化语法也类似&lt;/div&gt;&#xD;
&lt;div&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;b&gt;执行存储过程:&lt;/b&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span color="#147191" style="color: #147191;"&gt;&amp;nbsp;#假设proName有三个参数,最后一个参数传了null&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span color="#147191" style="color: #147191;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;ret=cur.callproc('procName',(parm1,parm2,None))&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span color="#147191" style="color: #147191;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; conn.commit()&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;b&gt;关闭连接&lt;/b&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span color="#147191" style="color: #147191;"&gt;conn.close()&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;/div&gt;&#xD;
&lt;div&gt;很简单有木有?&lt;/div&gt;&#xD;
&lt;div&gt;&lt;/div&gt;&#xD;
&lt;div&gt;更多代码示例见安装目录下里的unit test代码:&lt;/div&gt;&#xD;
&lt;div&gt;C:\Python31\Lib\site-packages\adodbapi\tests&lt;/div&gt;&lt;img src="http://www.cnblogs.com/solo/aggbug/2193343.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/solo/archive/2011/09/27/2193343.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/solo/archive/2011/09/27/2193345.html</id><title type="text">使用CSharp Driver操作Mongodb介绍</title><summary type="text">简介使用了一点Mongodb ,以下是自己的一点心得体会:不提及他的分步式,效率等特性.至少以下一些特点.让我感觉没有必要再在普通应用场景再使用关系型数据库如:SQLServer那样的数据库了.1. 省去了ORM:如NHibernate是一个优秀的ORM,性能也很好.但你得学习NHibernate的表达式语法.像NH那种文档健全的尚可接受. 我还有一些更可怕的经历,写过很多用存储过程查询后手动映射成对象的代码.完全肉搏哦.2. 绿色的:Mongodb,如果你不想注册成服务,只要启动那个exe就行了.数据库和数据库Data文件完全拷贝就可以迁移了.3. GridFS.把文件直接存在数据库里...</summary><published>2011-09-27T09:13:00Z</published><updated>2011-09-27T09:13:00Z</updated><author><name>Haozes</name><uri>http://www.cnblogs.com/solo/</uri></author><link rel="alternate" href="http://www.cnblogs.com/solo/archive/2011/09/27/2193345.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/solo/archive/2011/09/27/2193345.html"/><content type="html">&lt;ul&gt;&#xD;
&lt;li&gt;&lt;span style="border-collapse: separate; font-family: Tahoma; line-height: normal; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; font-size: medium;"&gt;简介&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;&lt;span style="border-collapse: separate; font-family: Tahoma; line-height: normal; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; font-size: medium;"&gt;使用了一点Mongodb ,以下是自己的一点心得体会:&lt;br /&gt;&lt;br /&gt;&#xD;
不提及他的分步式,效率等特性.至少以下一些特点.让我感觉没有必要再在普通应用场景再使用关系型数据库如:SQLServer那样的数据库了.&lt;br /&gt;&lt;br /&gt;&#xD;
1.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 省去了ORM:如NHibernate是一个优秀的ORM,性能也很好.但你得学习NHibernate的表达式语法.像NH那种文档健全的尚可接受.&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;div&gt;&lt;span style="border-collapse: separate; font-family: Tahoma; line-height: normal; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; font-size: medium;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 我还有一些更可怕的经历,写过很多用存储过程查询后手动映射成对象的代码.完全肉搏哦.&lt;br /&gt;&#xD;
2.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 绿色的:Mongodb,如果你不想注册成服务,只要启动那个exe就行了.数据库和数据库Data文件完全拷贝就可以迁移了.&lt;br /&gt;&#xD;
3.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GridFS.把文件直接存在数据库里&lt;br /&gt;&#xD;
4.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 各种编程语言驱动支持.&lt;br /&gt;&#xD;
官方支持的:&lt;br /&gt;&#xD;
C&lt;br /&gt;&#xD;
C# and .NET&lt;br /&gt;&#xD;
C++&lt;br /&gt;&#xD;
Erlang&lt;br /&gt;&#xD;
Haskell&lt;br /&gt;&#xD;
Java&lt;br /&gt;&#xD;
Javascript&lt;br /&gt;&#xD;
Perl&amp;nbsp;&lt;/span&gt;&#xD;
&lt;div&gt;&lt;span style="border-collapse: separate; font-family: Tahoma; line-height: normal; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; font-size: medium;"&gt;&lt;br /&gt;&#xD;
开源社区支持的更多:&lt;br /&gt;&#xD;
不列举了,很多语言没听说过.连小众的火星语言也都支持了呀.&lt;br /&gt;&lt;br /&gt;&#xD;
Mongodb 官方网站: http://www.mongodb.org/downloads&lt;br /&gt;&#xD;
C# 的Mongodb的Driver 版本也很多.本文只介绍mongodb官方网站上Csharp Driver.&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span style="border-collapse: separate; font-family: Tahoma; line-height: normal; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; font-size: medium;"&gt;这个Driver 是目前C#中,使用人数最多的,支持最完善的一个,支持MapReduce,但目前最新版本尚不支持Linq 方式查询.需要构建Query 表达式来查询,不那么直观,这个有点OUT.&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span style="border-collapse: separate; font-family: Tahoma; line-height: normal; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; font-size: medium;"&gt;&lt;span style="border-collapse: separate; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px;"&gt;具体见:&lt;a href="http://www.mongodb.org/display/DOCS/CSharp+Language+Center"&gt;http://www.mongodb.org/display/DOCS/CSharp+Language+Center&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;推荐的两个管理工具&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
1.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MongoVUE : 界面较为直观,易用.但只有商业版,可以试用&lt;br /&gt; 2.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RockMongo: PHP+NGinx 免费,目前我用过几个中,最为靠谱一个了.&lt;/div&gt;&#xD;
&lt;div&gt;&lt;a href="http://code.google.com/p/rock-php/wiki/rock_mongo"&gt;http://code.google.com/p/rock-php/wiki/rock_mongo&lt;/a&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;a href="http://code.google.com/p/rock-php/wiki/rock_mongo"&gt;&lt;/a&gt;3.在没有安装其他管理工具的时候,Mongodb自带了一个Shell.mongo.exe&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;CRUD 操作示例: (示例代码摘的.比我自己写的好)&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div&gt;&lt;br /&gt; 连接数据库&lt;/div&gt;&#xD;
&lt;div&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span color="#1C3387" style="color: #1c3387;"&gt;&amp;nbsp;//MongoServer manages access to MongoDatabase&lt;br /&gt;&#xD;
MongoServer mongoServer = &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MongoServer.Create("mongodb://localhost:27017");&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&#xD;
//MongoDatabase used to access MongoCollection instances&lt;br /&gt;&#xD;
_mongoDatabase = mongoServer.GetDatabase("CodeCamp");&lt;br /&gt;&#xD;
string COLLECTION="Artists";&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span color="#1C3387" style="color: #1c3387;"&gt;&lt;br /&gt;&#xD;
var artist = new Artist() { Name = "The Decembrists" };&lt;br /&gt;&lt;br /&gt;&#xD;
//直接插一个对象哦,&lt;br /&gt;&#xD;
_mongoDatabase.GetCollection&amp;lt;Artist&amp;gt;(COLLECTION)&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Insert(artist);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span color="#1C3387" style="color: #1c3387;"&gt;//更新&lt;br /&gt;&#xD;
artist.Name = "The Decemberists";&lt;br /&gt;&#xD;
_mongoDatabase.GetCollection&amp;lt;Artist&amp;gt;(COLLECTION)&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Save(artist);&lt;br /&gt;&#xD;
//更新一批&lt;br /&gt;&#xD;
_mongoDatabase.GetCollection&amp;lt;Artist&amp;gt;(COLLECTION).Update(&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Query.EQ("Name", "The Decemberists"),&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Update.PushAll("Albums", "Castaways and Cutouts", "Picaresque", "Hazards of Love", "The Crane Wife")&lt;br /&gt;&#xD;
);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; 更多更复杂的玩法:见&lt;/div&gt;&#xD;
&lt;div&gt;&lt;a href="http://www.mongodb.org/display/DOCS/CSharp+Driver+Tutorial"&gt;http://www.mongodb.org/display/DOCS/CSharp+Driver+Tutorial&lt;/a&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;/div&gt;&#xD;
&lt;div&gt;一个详细介绍的PPT:&lt;/div&gt;&#xD;
&lt;div&gt;&lt;a href="https://skydrive.live.com/?cid=4c2acd76fe2dcc19&amp;amp;sc=documents&amp;amp;id=4C2ACD76FE2DCC19%21237&amp;amp;retry#!/view.aspx/.Public/NYC-Code-Camp-2011-DotNet-MongoDB.pptx?cid=4c2acd76fe2dcc19&amp;amp;sc=documents"&gt;https://skydrive.live.com/?cid=4c2acd76fe2dcc19&amp;amp;sc=documents&amp;amp;id=4C2ACD76FE2DCC19%21237&amp;amp;retry#!/view.aspx/.Public/NYC-Code-Camp-2011-DotNet-MongoDB.pptx?cid=4c2acd76fe2dcc19&amp;amp;sc=documents&lt;/a&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;/div&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;其他:&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;div&gt;附件的PPT有更多的示例.里面提到了一些使用文档型数据库对象设计的准则&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;你的对象的模型即是你的数据模型&lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;不要怕你的对象数据冗余&lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;但也不要把所有的数据塞一个文档里&lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;不要怕在文档里保存聚合统计信息&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&lt;img src="http://www.cnblogs.com/solo/aggbug/2193345.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/solo/archive/2011/09/27/2193345.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/solo/archive/2011/04/09/2010508.html</id><title type="text">运行.Net4.0程序是否要安装之前的.Net版本</title><summary type="text">网上说法不一,MS说的 .net4.0 in-process side-by-side compatibility 也没太明白,以下是我用一个简单的控制台程序实测的情况测试环境:Win XP XP3 卸载了.net其他版本,只安装了.net 4.0,所调用的dll为之前用VS2008编译.(若dll是源码工程放到解决方案一起编译,dll工程版本设成V2.0 V3.5,最终程序都可以正常)主程序Console.exe调用程序集 dll运行结果.Net4.0.Net 2.0正常.Net4.0 Client Profile.Net 2.0编译不了.Net4.0.Net 3.5正常.Net 2.0无不</summary><published>2011-04-09T07:46:00Z</published><updated>2011-04-09T07:46:00Z</updated><author><name>Haozes</name><uri>http://www.cnblogs.com/solo/</uri></author><link rel="alternate" href="http://www.cnblogs.com/solo/archive/2011/04/09/2010508.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/solo/archive/2011/04/09/2010508.html"/><content type="html">&lt;div&gt;&#xD;
&lt;div&gt;&lt;span&gt;网上说法不一,MS说的 .net4.0 in-process side-by-side compatibility 也没太明白,以下是我用一个简单的控制台程序实测的情况&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span&gt;测试环境:&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span&gt;Win XP XP3 卸载了.net其他版本,只安装了.net 4.0,所调用的dll为之前用VS2008编译.&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span&gt;(若dll是源码工程放到解决方案一起编译,dll工程版本设成V2.0 V3.5,最终程序都可以正常)&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;table border="1" cellspacing="0" cellpadding="2" width="80%"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top"&gt;主程序Console.exe&amp;nbsp;&lt;/td&gt;&#xD;
&lt;td valign="top"&gt;调用程序集 dll&lt;/td&gt;&#xD;
&lt;td valign="top"&gt;运行结果&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top"&gt;.Net4.0&lt;/td&gt;&#xD;
&lt;td valign="top"&gt;.Net 2.0&lt;/td&gt;&#xD;
&lt;td valign="top"&gt;正常&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top"&gt;.Net4.0 Client Profile&lt;/td&gt;&#xD;
&lt;td valign="top"&gt;&#xD;
&lt;div&gt;&lt;span&gt;.Net 2.0&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top"&gt;编译不了&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top"&gt;&#xD;
&lt;div&gt;&lt;span&gt;.Net4.0&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top"&gt;&#xD;
&lt;div&gt;&lt;span&gt;.Net 3.5&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top"&gt;正常&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top"&gt;.Net 2.0&lt;/td&gt;&#xD;
&lt;td valign="top"&gt;无&lt;/td&gt;&#xD;
&lt;td valign="top"&gt;不能运行&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top"&gt;.Net3.5&lt;/td&gt;&#xD;
&lt;td valign="top"&gt;无&lt;/td&gt;&#xD;
&lt;td valign="top"&gt;不能运行&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;/div&gt;&#xD;
&lt;div&gt;结果:&lt;/div&gt;&#xD;
&lt;div&gt;1.编译为.Net 4.0的应用程序,不需要安装之前的版本.并且可以调用老版本程序集.Target为Client Profile的不可以.&lt;/div&gt;&#xD;
&lt;div&gt;2.单独运行之前版本的.net 程序,需要安装对应的framework&lt;/div&gt;&#xD;
&lt;div&gt;&lt;/div&gt;&#xD;
&lt;div&gt;ps:&lt;/div&gt;&#xD;
&lt;div&gt;Microsoft .NET Framework 4 Client Profile (Standalone Installer) 41M&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
&lt;div&gt;&lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=e5ad0459-cbcc-4b4f-97b6-fb17111cf544"&gt;http://www.microsoft.com/downloads/en/details.aspx?FamilyID=e5ad0459-cbcc-4b4f-97b6-fb17111cf544&lt;/a&gt;&lt;/div&gt;&#xD;
Microsoft .NET Framework 4 (Standalone Installer) 48M&lt;/div&gt;&#xD;
&lt;div&gt;&lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=0A391ABD-25C1-4FC0-919F-B21F31AB88B7"&gt;http://www.microsoft.com/downloads/en/details.aspx?FamilyID=0A391ABD-25C1-4FC0-919F-B21F31AB88B7&lt;/a&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;/div&gt;&#xD;
&lt;div&gt;reference:&lt;/div&gt;&#xD;
&lt;div&gt;&lt;a href="http://stackoverflow.com/questions/2642301/do-you-need-both-net-3-5-and-4-0-installed-or-just-net-4"&gt;http://stackoverflow.com/questions/2642301/do-you-need-both-net-3-5-and-4-0-installed-or-just-net-4&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/solo/aggbug/2010508.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/solo/archive/2011/04/09/2010508.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/solo/archive/2010/12/30/1921722.html</id><title type="text">javascript Disable &amp;lt;div&amp;gt; or other tag in Other Browser like FF,Chrome</title><summary type="text">如果你也和我一样,不幸维护了一个javascript,它广泛的在非input,textbox,等html标签才有xxx.disable=true.功能.这段代码并不幸地要兼容其他非IE浏览器,也许下面这段脚本对你有用:剩下就就是这种方法没有灰显的效果,交给css吧.</summary><published>2010-12-30T06:50:00Z</published><updated>2010-12-30T06:50:00Z</updated><author><name>Haozes</name><uri>http://www.cnblogs.com/solo/</uri></author><link rel="alternate" href="http://www.cnblogs.com/solo/archive/2010/12/30/1921722.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/solo/archive/2010/12/30/1921722.html"/><content type="html">&lt;p&gt;如果你也和我一样,不幸维护了一个javascript,它广泛的在非input,textbox,等html标签才有xxx.disable=true.功能.这段代码并不幸地要兼容其他非IE浏览器,也许下面这段脚本对你有用:&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;function&lt;/span&gt; IsIE()&#xD;
{&#xD;
	&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; !!(&lt;span style="color: #0000ff;"&gt;window&lt;/span&gt;.attachEvent &amp;amp;&amp;amp; !&lt;span style="color: #0000ff;"&gt;window&lt;/span&gt;.opera)&#xD;
}&#xD;
&lt;span style="color: #0000ff;"&gt;function&lt;/span&gt; setDisabled(el, disabled){&#xD;
	&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;(IsIE())&#xD;
	{&#xD;
		el.disabled=disabled;&#xD;
	}&#xD;
	&lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&#xD;
	{&lt;span style="color: #008000;"&gt;//非IE浏览器中.把onclick等属性挪一下再挪回来&lt;/span&gt;&#xD;
		&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;(disabled)&#xD;
		{&#xD;
			el.__onclick=el.onclick;&#xD;
			el.onclick="&lt;span style="color: #8b0000;"&gt;&amp;nbsp;&lt;/span&gt;";&#xD;
			el.__onmouseover=el.onmouseover;&#xD;
			el.onmouseover="&lt;span style="color: #8b0000;"&gt;&amp;nbsp;&lt;/span&gt;";&#xD;
			el.__onmouseout=el.onmouseout;&#xD;
			el.onmouseout="";&#xD;
		}&#xD;
		&lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;{&#xD;
			&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;(el.__onclick)&#xD;
				el.onclick=el.__onclick;&#xD;
			&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;(el.__onmouseover)&#xD;
				el.onmouseover=el.__onmouseover;&#xD;
			&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;(el.__onmouseout)&#xD;
				el.onmouseout=el.__onmouseout;				&#xD;
		}&#xD;
		el.&lt;span style="color: #8b0000;"&gt;disabled&lt;/span&gt;=disabled;&#xD;
	}&#xD;
}&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
剩下就就是这种方法没有灰显的效果,交给css吧.&lt;/p&gt;&lt;img src="http://www.cnblogs.com/solo/aggbug/1921722.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/solo/archive/2010/12/30/1921722.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/solo/archive/2010/12/01/1892708.html</id><title type="text">Delphi 无类型参数传递动态数组和静态数组</title><summary type="text">前几天发现的一个相关的问题,总结了下,备忘:相关几个函数声明: procedure FillChar(var X; Count: Integer; Value: Byte); procedure CopyMemory(Destination: Pointer; Source: Pointer; Length: DWORD); function THandleStream.Write(const B...</summary><published>2010-12-01T01:55:00Z</published><updated>2010-12-01T01:55:00Z</updated><author><name>Haozes</name><uri>http://www.cnblogs.com/solo/</uri></author><link rel="alternate" href="http://www.cnblogs.com/solo/archive/2010/12/01/1892708.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/solo/archive/2010/12/01/1892708.html"/><content type="html">&lt;p&gt;&lt;span style="font-size: 10pt;"&gt;前几天发现的一个相关的问题,总结了下,备忘:&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 10pt;"&gt;相关几个函数声明:    &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 10pt;"&gt;procedure FillChar(&lt;span style="color: #ff0000;"&gt;var&lt;/span&gt; X; Count: Integer; Value: Byte);     &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 10pt;"&gt;procedure&amp;nbsp; CopyMemory(Destination: &lt;span style="color: #ff0000;"&gt;Pointer&lt;/span&gt;; Source: &lt;span style="color: #ff0000;"&gt;Pointer&lt;/span&gt;; Length: DWORD);     &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 10pt;"&gt;function THandleStream.Write(&lt;span style="color: #ff0000;"&gt;const&lt;/span&gt; Buffer; Count: Longint): Longint; &lt;/span&gt;    &lt;br /&gt;    &lt;br /&gt;测试代码:&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;&lt;span style="font-size: 11px; line-height: 14px;"&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;" onclick="cnblogs_code_show('0bd80ac2-aee6-47c7-9dfa-157f64fcbce6')"&gt;&lt;div id="cnblogs_code_open_0bd80ac2-aee6-47c7-9dfa-157f64fcbce6"&gt;&lt;pre&gt;&lt;div&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;br /&gt;&lt;br /&gt;--&gt;&lt;span style="color: #0000ff;"&gt;procedure&lt;/span&gt;&lt;span style="color: #000000;"&gt; TForm1.btn1Click(Sender: TObject);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;var&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;  verifyMsg         : &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;array&lt;/span&gt;&lt;span style="color: #000000;"&gt;[&lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;..&lt;/span&gt;&lt;span style="color: #800080;"&gt;48&lt;/span&gt;&lt;span style="color: #000000;"&gt;] &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;of&lt;/span&gt;&lt;span style="color: #000000;"&gt; Char; &lt;/span&gt;&lt;span style="color: #000000;"&gt;//&lt;/span&gt;&lt;span style="color: #000000;"&gt;定长数组&lt;br /&gt;  signedLen         : Integer;&lt;br /&gt;  verfyFile         : TFileStream;&lt;br /&gt;  str               : &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;  len               : Integer;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;begin&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;  len :&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;48&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;  str :&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;hello world&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&lt;br /&gt;  FillChar(verifyMsg[&lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;], len, &lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #000000;"&gt;//&lt;/span&gt;&lt;span style="color: #000000;"&gt; OK&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #000000;"&gt;//&lt;/span&gt;&lt;span style="color: #000000;"&gt; FillChar(verifyMsg, len, &lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;br /&gt;  CopyMemory(@verifyMsg[&lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;], PChar(@str[&lt;/span&gt;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;]), Length(str)); &lt;/span&gt;&lt;span style="color: #000000;"&gt;//&lt;/span&gt;&lt;span style="color: #000000;"&gt;要从str[&lt;/span&gt;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;] 开始copy&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #000000;"&gt;//&lt;/span&gt;&lt;span style="color: #000000;"&gt; OK&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #000000;"&gt;//&lt;/span&gt;&lt;span style="color: #000000;"&gt; CopyMemory(@verifyMsg, Pointer(str), Length(str)); &lt;/span&gt;&lt;span style="color: #000000;"&gt;//&lt;/span&gt;&lt;span style="color: #000000;"&gt;str pointer pchar都可以&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #000000;"&gt;//&lt;/span&gt;&lt;span style="color: #000000;"&gt; OK&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #000000;"&gt;//&lt;/span&gt;&lt;span style="color: #000000;"&gt; CopyMemory(@verifyMsg, @str[&lt;/span&gt;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;], Length(str)); &lt;/span&gt;&lt;span style="color: #000000;"&gt;//&lt;/span&gt;&lt;span style="color: #000000;"&gt;要从str[&lt;/span&gt;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;] 开始copy&lt;br /&gt;&lt;br /&gt;  verfyFile :&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; TFileStream.Create(&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;c:\\test.data&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;, fmCreate &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;or&lt;/span&gt;&lt;span style="color: #000000;"&gt; fmShareDenyRead);&lt;br /&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #000000;"&gt;//&lt;/span&gt;&lt;span style="color: #000000;"&gt; 方法1 Ok&lt;br /&gt;  verfyFile.Write(verifyMsg[&lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;], Length(verifyMsg));&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #000000;"&gt;//&lt;/span&gt;&lt;span style="color: #000000;"&gt; 方法 &lt;/span&gt;&lt;span style="color: #800080;"&gt;2&lt;/span&gt;&lt;span style="color: #000000;"&gt; OK&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #000000;"&gt;//&lt;/span&gt;&lt;span style="color: #000000;"&gt; verfyFile.Write(PChar(@verifyMsg[&lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;])^, Length(verifyMsg));&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #000000;"&gt;//&lt;/span&gt;&lt;span style="color: #000000;"&gt; 方法 &lt;/span&gt;&lt;span style="color: #800080;"&gt;3&lt;/span&gt;&lt;span style="color: #000000;"&gt;  OK&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #000000;"&gt;//&lt;/span&gt;&lt;span style="color: #000000;"&gt; verfyFile.Write(verifyMsg, Length(verifyMsg));&lt;br /&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #000000;"&gt;//&lt;/span&gt;&lt;span style="color: #000000;"&gt; 测试写入字符串&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #000000;"&gt;//&lt;/span&gt;&lt;span style="color: #000000;"&gt; 方法1    OK&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #000000;"&gt;//&lt;/span&gt;&lt;span style="color: #000000;"&gt; verfyFile.&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;write&lt;/span&gt;&lt;span style="color: #000000;"&gt;(PChar(str)^,length(str));&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #000000;"&gt;//&lt;/span&gt;&lt;span style="color: #000000;"&gt; 方法 &lt;/span&gt;&lt;span style="color: #800080;"&gt;2&lt;/span&gt;&lt;span style="color: #000000;"&gt;  wrong&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #000000;"&gt;//&lt;/span&gt;&lt;span style="color: #000000;"&gt; 写入内容是错误的 可能是str的内部结构导致&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #000000;"&gt;//&lt;/span&gt;&lt;span style="color: #000000;"&gt; verfyFile.&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;write&lt;/span&gt;&lt;span style="color: #000000;"&gt;(str, length(str));&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #000000;"&gt;//&lt;/span&gt;&lt;span style="color: #000000;"&gt; 方法 &lt;/span&gt;&lt;span style="color: #800080;"&gt;3&lt;/span&gt;&lt;span style="color: #000000;"&gt; OK&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #000000;"&gt;//&lt;/span&gt;&lt;span style="color: #000000;"&gt; verfyFile.&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;write&lt;/span&gt;&lt;span style="color: #000000;"&gt;(str[&lt;/span&gt;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;], length(str));&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #000000;"&gt;//&lt;/span&gt;&lt;span style="color: #000000;"&gt; 方法 &lt;/span&gt;&lt;span style="color: #800080;"&gt;4&lt;/span&gt;&lt;span style="color: #000000;"&gt;  OK&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #000000;"&gt;//&lt;/span&gt;&lt;span style="color: #000000;"&gt; verfyFile.&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;write&lt;/span&gt;&lt;span style="color: #000000;"&gt;(Pointer(str)^,length(str));&lt;br /&gt;&lt;br /&gt;  freeAndNil(verfyFile);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;end&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;procedure&lt;/span&gt;&lt;span style="color: #000000;"&gt; TForm1.btn2Click(Sender: TObject);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;var&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;  verifyMsg         : &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;array&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;of&lt;/span&gt;&lt;span style="color: #000000;"&gt; Char;    &lt;/span&gt;&lt;span style="color: #000000;"&gt;//&lt;/span&gt;&lt;span style="color: #000000;"&gt;动态数组&lt;br /&gt;  signedLen         : Integer;&lt;br /&gt;  verfyFile         : TFileStream;&lt;br /&gt;  str               : &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;  len               : Integer;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;begin&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;  len :&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;48&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;  str :&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;hello world&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;  SetLength(verifyMsg, len);&lt;br /&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #000000;"&gt;//&lt;/span&gt;&lt;span style="color: #000000;"&gt; Error FillChar 参数不是指针,如下这行所以是错的.&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #000000;"&gt;//&lt;/span&gt;&lt;span style="color: #000000;"&gt; FillChar(verifyMsg, len, &lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;  FillChar(verifyMsg[&lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;], len, &lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #000000;"&gt;//&lt;/span&gt;&lt;span style="color: #000000;"&gt; OK 接收参数是指针&lt;br /&gt;  CopyMemory(@verifyMsg[&lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;], @str[&lt;/span&gt;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;], Length(str));&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #000000;"&gt;//&lt;/span&gt;&lt;span style="color: #000000;"&gt; 要从str[&lt;/span&gt;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;] 开始copy&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #000000;"&gt;//&lt;/span&gt;&lt;span style="color: #000000;"&gt; CopyMemory(verifyMsg, PChar(@str[&lt;/span&gt;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;]), Length(str));&lt;br /&gt;  verfyFile :&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; TFileStream.Create(&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;c:\\test2.data&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;, fmCreate &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;or&lt;/span&gt;&lt;span style="color: #000000;"&gt; fmShareDenyRead);&lt;br /&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #000000;"&gt;//&lt;/span&gt;&lt;span style="color: #000000;"&gt; 方法 &lt;/span&gt;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;    OK 接收参数是无参类型&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #000000;"&gt;//&lt;/span&gt;&lt;span style="color: #000000;"&gt; verfyFile.Write(PChar(@verifyMsg[&lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;])^, Length(verifyMsg));&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #000000;"&gt;//&lt;/span&gt;&lt;span style="color: #000000;"&gt; 方法 &lt;/span&gt;&lt;span style="color: #800080;"&gt;2&lt;/span&gt;&lt;span style="color: #000000;"&gt;    OK 接收参数是无参类型&lt;br /&gt;  verfyFile.Write(verifyMsg[&lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;], Length(verifyMsg));&lt;br /&gt;&lt;br /&gt;  freeAndNil(verfyFile);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;end&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 10pt;"&gt;原因和结论:&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 10pt;"&gt;1.定长数组A就是一个变量,A和A[0], @A=@A[0] &#xD;
  &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 10pt;"&gt;动态数组B就是一个指针,B是数组的首地址.B=@B[0] &#xD;
  &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 10pt;"&gt;2.普通参数按值传递，常量参数和变量参数都是按地址传递的 ,无类型参数只能是常量或变量参数,都是按地址传递 &#xD;
  &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 10pt;"&gt;3.Best Practise:在用数组作参数的时，不管静态动态一率从0开始，要求传无类型参数的时候一率用arr[0]是个好习惯。写成 arr[Low(arr)] 最好.&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 10pt;"&gt;参考: &#xD;
  &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 10pt;"&gt;Delphi - 数组 详解 &#xD;
  &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 10pt;"&gt;&lt;a href="http://www.cnblogs.com/huangjacky/archive/2009/12/21/1628833.html"&gt;http://www.cnblogs.com/huangjacky/archive/2009/12/21/1628833.html&lt;/a&gt; &#xD;
  &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 10pt;"&gt;诡异的动态数组问题 &#xD;
  &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 10pt;"&gt;&lt;a href="http://bbs.2ccc.com/topic.asp?topicid=358558"&gt;http://bbs.2ccc.com/topic.asp?topicid=358558&lt;/a&gt; &#xD;
  &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 10pt;"&gt;关于指针和过程/函数的无类型 var 参数的问题。 &#xD;
  &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 10pt;"&gt;&lt;a title="http://www.delphibbs.com/delphibbs/dispq.asp?lid=1938519" href="http://www.delphibbs.com/delphibbs/dispq.asp?lid=1938519"&gt;http://www.delphibbs.com/delphibbs/dispq.asp?lid=1938519&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/solo/aggbug/1892708.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/solo/archive/2010/12/01/1892708.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/solo/archive/2010/11/08/1871741.html</id><title type="text">WMI编程及python 操作WMI相关资料</title><summary type="text">1.WMI相关开发工具WMI Administrative Tools(WMI CIM Studio,WMI Object Browser)下载：http://www.microsoft.com/downloads/details.aspx?familyid=6430F853-1120-48DB-8CC5-F2ABDC3ED314&amp;amp;displaylang=en2.参考资料WMI 脚本入门：...</summary><published>2010-11-08T06:27:00Z</published><updated>2010-11-08T06:27:00Z</updated><author><name>Haozes</name><uri>http://www.cnblogs.com/solo/</uri></author><link rel="alternate" href="http://www.cnblogs.com/solo/archive/2010/11/08/1871741.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/solo/archive/2010/11/08/1871741.html"/><content type="html">&lt;p&gt;1.WMI相关开发工具&lt;/p&gt;&#xD;
&lt;p&gt;WMI Administrative Tools(WMI CIM Studio,WMI Object Browser)下载：&lt;br /&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=6430F853-1120-48DB-8CC5-F2ABDC3ED314&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=6430F853-1120-48DB-8CC5-F2ABDC3ED314&amp;amp;displaylang=en&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;2.参考资料&lt;/p&gt;&#xD;
&lt;p&gt;WMI 脚本入门：第一部分&lt;a href="http://msdn.microsoft.com/zh-cn/library/ms974579.aspx"&gt;http://msdn.microsoft.com/zh-cn/library/ms974579.aspx&lt;/a&gt;&lt;br /&gt;WMI 脚本入门：第二部分&lt;a href="http://msdn.microsoft.com/zh-cn/library/ms974592.aspx"&gt;http://msdn.microsoft.com/zh-cn/library/ms974592.aspx&lt;/a&gt;&lt;br /&gt;WMI 脚本入门：第三部分&lt;a href="http://msdn.microsoft.com/zh-cn/library/ms974547.aspx"&gt;http://msdn.microsoft.com/zh-cn/library/ms974547.aspx&lt;/a&gt;&lt;br /&gt;使用WMI：&lt;a href="http://msdn.microsoft.com/en-us/library/aa393964.aspx"&gt;http://msdn.microsoft.com/en-us/library/aa393964.aspx&lt;/a&gt;&lt;br /&gt;使用脚本程序管理Windows网络 第三部分：理解WMI&lt;br /&gt;&lt;a href="http://windows.chinaitlab.com/administer/773825_3.html"&gt;http://windows.chinaitlab.com/administer/773825_3.html&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;3.使用wmi管理IIS 7.0&lt;/p&gt;&#xD;
&lt;p&gt;Get to Know the IIS 7.0 WMI Provider Using CIM Studio&lt;br /&gt;&lt;a href="http://learn.iis.net/page.aspx/265/get-to-know-the-iis7-wmi-provider-using-cim-studio/"&gt;http://learn.iis.net/page.aspx/265/get-to-know-the-iis7-wmi-provider-using-cim-studio/&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Managing Sites with IIS 7.0's WMI Provider&lt;br /&gt;&lt;a href="http://learn.iis.net/page.aspx/162/managing-sites-with-iis-7039s-wmi-provider/"&gt;http://learn.iis.net/page.aspx/162/managing-sites-with-iis-7039s-wmi-provider/&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/solo/aggbug/1871741.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/solo/archive/2010/11/08/1871741.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/solo/archive/2010/11/08/1871734.html</id><title type="text">扩展巴科斯范式介绍</title><summary type="text">扩展巴科斯范式广泛应用于计算机编程语言描述中,(在看python的format说明,看了半天没看懂,简单一点语法一般看demo就明白了,更复杂的语法没了解过这个还真难看懂).回家翻了下书,原来在&amp;lt;离散数学及其应用&amp;gt; 的计算模型那一章介绍过(还没有看到那.)以下是T-SQL 的SELECT语句说明:--------------------------------------------------------&amp;lt; &amp;gt; 尖括号，用于分隔字符串，字符串为语法元素的名称，SQL语言的非终结符。 ::= 定义操作符。用在生成规则中，分隔规则定义的元素和规则定义。 被定义的元素位于操作符的左边，规则定义位于</summary><published>2010-11-08T06:18:00Z</published><updated>2010-11-08T06:18:00Z</updated><author><name>Haozes</name><uri>http://www.cnblogs.com/solo/</uri></author><link rel="alternate" href="http://www.cnblogs.com/solo/archive/2010/11/08/1871734.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/solo/archive/2010/11/08/1871734.html"/><content type="html">&lt;p&gt;&lt;a href="http://zh.wikipedia.org/zh/%E6%89%A9%E5%B1%95%E5%B7%B4%E7%A7%91%E6%96%AF%E8%8C%83%E5%BC%8F" target="_blank"&gt;扩展巴科斯范式&lt;/a&gt;广泛应用于计算机编程语言描述中,(在看python的format说明,看了半天没看懂,简单一点语法一般看demo就明白了,更复杂的语法没了解过这个还真难看懂).回家翻了下书,原来在&amp;lt;离散数学及其应用&amp;gt; 的计算模型那一章介绍过(还没有看到那.)&lt;/p&gt;&#xD;
&lt;p&gt;以下是T-SQL 的SELECT语句说明:&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;SELECT statement ::= &#xD;
&amp;lt; query_expression &amp;gt; &#xD;
[ ORDER BY { order_by_expression | column_position [ ASC | DESC ] } &#xD;
[ ,...n ] ] &#xD;
    [ COMPUTE &#xD;
        { { AVG | COUNT | MAX | MIN | SUM } ( expression ) } [ ,...n ] &#xD;
        [ BY expression [ ,...n ] ] &#xD;
] &#xD;
    [ FOR { BROWSE | XML { RAW | AUTO | EXPLICIT } &#xD;
[ , XMLDATA ] &#xD;
[ , ELEMENTS ] &#xD;
[ , BINARY base64 ] &#xD;
        } &#xD;
] &#xD;
    [ OPTION ( &amp;lt; query_hint &amp;gt; [ ,...n ]) ] &#xD;
&#xD;
&amp;lt; query expression &amp;gt; ::= &#xD;
    { &amp;lt; query specification &amp;gt; | ( &amp;lt; query expression &amp;gt; ) } &#xD;
    [ UNION [ ALL ] &amp;lt; query specification | ( &amp;lt; query expression &amp;gt; ) [...n ] ]&#xD;
&#xD;
&amp;lt; query specification &amp;gt; ::= &#xD;
SELECT [ ALL | DISTINCT ] &#xD;
[ { TOP integer | TOP integer PERCENT } [ WITH TIES ] ] &#xD;
&amp;lt; select_list &amp;gt; &#xD;
[ INTO new_table ] &#xD;
[ FROM { &amp;lt; table_source &amp;gt; } [ ,...n ] ] &#xD;
[ WHERE &amp;lt; search_condition &amp;gt; ] &#xD;
[ GROUP BY [ ALL ] group_by_expression [ ,...n ] &#xD;
[ WITH { CUBE | ROLLUP } ] &#xD;
] &#xD;
    [HAVING &amp;lt;search_condition&amp;gt;]&#xD;
&#xD;
&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;--------------------------------------------------------&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt; &amp;gt;&amp;nbsp;&amp;nbsp; 尖括号，用于分隔字符串，字符串为语法元素的名称，SQL语言的非终结符。 &lt;/p&gt;&#xD;
&lt;p&gt;::=&amp;nbsp;&amp;nbsp; 定义操作符。用在生成规则中，分隔规则定义的元素和规则定义。 被定义的元素位于操作符的左边，规则定义位于操作符的右边。 &lt;/p&gt;&#xD;
&lt;p&gt;[ ]&amp;nbsp;&amp;nbsp; 方括号表示规则中的可选元素。方括号中的规则部分可以明确指定也可以省略。 &lt;/p&gt;&#xD;
&lt;p&gt;{ }&amp;nbsp;&amp;nbsp; 花括号聚集规则中的元素。在花括号中的规则部分必须明确指定。 &lt;/p&gt;&#xD;
&lt;p&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 替换操作符。 该竖线表明竖线之后的规则部分对于竖线之前的部分是可替换的。 如果竖线出现的位置不在花括号或方括号内，那么它指定对于该规则定义的元素的一个完整替换项。如果竖线出现的位置在花括号或方括号内，那么它指定花括号对或方括号对最里面内容的替换项。 &lt;/p&gt;&#xD;
&lt;p&gt;. . . 省略号表明在规则中省略号应用的元素可能被重复多次。如果省略号紧跟在闭花括号"}"之后，那么它应用于闭花括号和开花括号"{"之间的规则部分。如果省略号出现在其他任何元素的后面，那么它只应用于该元素。 &lt;/p&gt;&#xD;
&lt;p&gt;!!&amp;nbsp; 介绍普通英文文本。BNF中没有表示某语法元素的定义时使用。 &lt;/p&gt;&#xD;
&lt;p&gt;空格用来分隔语法元素。多个空格和多个换行符被视为单个空格。除了上面所给的特殊用途的符号, 在规则中的其它字符和字符串表示其本义。此外，如果定义操作符右边的符号全部由BNF中的符号组成，那么这些符号仅代表其本义，不需要考虑其特殊含义。 &lt;/p&gt;&#xD;
&lt;p&gt;花括号对和方括号对内部可以任意嵌套，替换操作符可以出现在嵌套的任何地方。 &lt;/p&gt;&#xD;
&lt;p&gt;形成任何语法元素实例的字符串可能产生自该元素的BNF定义，产生过程应用以下步骤： &lt;/p&gt;&#xD;
&lt;p&gt;1) 对于该元素，选择在产生规则右边定义的任意一个选项， 并用该选项替换该元素。 &lt;/p&gt;&#xD;
&lt;p&gt;2) 替换每个省略号和省略号所应用的一个或多个对象的实例。 &lt;/p&gt;&#xD;
&lt;p&gt;3) 对于方括号中的字符串部分， 要么删除括号和括号中的内容，要么将括号转换为花括号。 &lt;/p&gt;&#xD;
&lt;p&gt;4) 对于花括号中的字符串部分，对其子字符串应用步骤1至步骤5，然后移除花括号。 &lt;/p&gt;&#xD;
&lt;p&gt;5) 对于仍然在字符串中的非终结语法元素(如在尖括号中的名称)，应用步骤1至步骤5 。 &lt;br /&gt;当字符串中不再存在非终结符时，扩展过程（或产生过程）完成。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;标准中提议为正规表示的下列字符:&lt;/p&gt;&#xD;
&lt;table &gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;th&gt;用途&lt;/th&gt;&lt;th&gt;符号表示&lt;/th&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;定义&lt;/td&gt;&#xD;
&lt;th&gt;=&lt;/th&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;串接&lt;/td&gt;&#xD;
&lt;th&gt;,&lt;/th&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;终止&lt;/td&gt;&#xD;
&lt;th&gt;&amp;nbsp;;&lt;/th&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;分隔&lt;/td&gt;&#xD;
&lt;th&gt;|&lt;/th&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;可选&lt;/td&gt;&#xD;
&lt;th&gt;[ ... ]&lt;/th&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;重复&lt;/td&gt;&#xD;
&lt;th&gt;{ ... }&lt;/th&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;分组&lt;/td&gt;&#xD;
&lt;th&gt;( ... )&lt;/th&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;双引号&lt;/td&gt;&#xD;
&lt;th&gt;" ... "&lt;/th&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;单引号&lt;/td&gt;&#xD;
&lt;th&gt;' ... '&lt;/th&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;注释&lt;/td&gt;&#xD;
&lt;th&gt;(* ... *)&lt;/th&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;特殊序列&lt;/td&gt;&#xD;
&lt;th&gt;&amp;nbsp;? ...&amp;nbsp;?&lt;/th&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;除外&lt;/td&gt;&#xD;
&lt;th&gt;-&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;/th&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div id="_mcePaste"  style="position: absolute; left: -10000px; top: 1329px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;"&gt;&lt;span style="font-family: sans-serif; line-height: 22px; font-size: 18px;"&gt;&#xD;
&lt;p style="margin-top: 0.4em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; line-height: 1.5em;"&gt;标准中提议为正规表示的下列字符:&lt;/p&gt;&#xD;
&lt;table  style="font-size: 15px; color: black; background-color: #f9f9f9; margin-top: 1em; margin-right: 1em; margin-bottom: 1em; margin-left: 0px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; border-collapse: collapse; background-position: initial initial; background-repeat: initial initial; border: 1px solid #aaaaaa;"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;th style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #f2f2f2; text-align: center; background-position: initial initial; background-repeat: initial initial; padding: 0.2em; border: 1px solid #aaaaaa;"&gt;用途&lt;/th&gt;&lt;th style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #f2f2f2; text-align: center; background-position: initial initial; background-repeat: initial initial; padding: 0.2em; border: 1px solid #aaaaaa;"&gt;符号表示&lt;/th&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="padding: 0.2em; border: 1px solid #aaaaaa;"&gt;定义&lt;/td&gt;&#xD;
&lt;th style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #f2f2f2; text-align: center; background-position: initial initial; background-repeat: initial initial; padding: 0.2em; border: 1px solid #aaaaaa;"&gt;=&lt;/th&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="padding: 0.2em; border: 1px solid #aaaaaa;"&gt;串接&lt;/td&gt;&#xD;
&lt;th style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #f2f2f2; text-align: center; background-position: initial initial; background-repeat: initial initial; padding: 0.2em; border: 1px solid #aaaaaa;"&gt;,&lt;/th&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="padding: 0.2em; border: 1px solid #aaaaaa;"&gt;终止&lt;/td&gt;&#xD;
&lt;th style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #f2f2f2; text-align: center; background-position: initial initial; background-repeat: initial initial; padding: 0.2em; border: 1px solid #aaaaaa;"&gt;&amp;nbsp;;&lt;/th&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="padding: 0.2em; border: 1px solid #aaaaaa;"&gt;分隔&lt;/td&gt;&#xD;
&lt;th style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #f2f2f2; text-align: center; background-position: initial initial; background-repeat: initial initial; padding: 0.2em; border: 1px solid #aaaaaa;"&gt;|&lt;/th&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="padding: 0.2em; border: 1px solid #aaaaaa;"&gt;可选&lt;/td&gt;&#xD;
&lt;th style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #f2f2f2; text-align: center; background-position: initial initial; background-repeat: initial initial; padding: 0.2em; border: 1px solid #aaaaaa;"&gt;[ ... ]&lt;/th&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="padding: 0.2em; border: 1px solid #aaaaaa;"&gt;重复&lt;/td&gt;&#xD;
&lt;th style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #f2f2f2; text-align: center; background-position: initial initial; background-repeat: initial initial; padding: 0.2em; border: 1px solid #aaaaaa;"&gt;{ ... }&lt;/th&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="padding: 0.2em; border: 1px solid #aaaaaa;"&gt;分组&lt;/td&gt;&#xD;
&lt;th style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #f2f2f2; text-align: center; background-position: initial initial; background-repeat: initial initial; padding: 0.2em; border: 1px solid #aaaaaa;"&gt;( ... )&lt;/th&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="padding: 0.2em; border: 1px solid #aaaaaa;"&gt;双引号&lt;/td&gt;&#xD;
&lt;th style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #f2f2f2; text-align: center; background-position: initial initial; background-repeat: initial initial; padding: 0.2em; border: 1px solid #aaaaaa;"&gt;" ... "&lt;/th&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="padding: 0.2em; border: 1px solid #aaaaaa;"&gt;单引号&lt;/td&gt;&#xD;
&lt;th style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #f2f2f2; text-align: center; background-position: initial initial; background-repeat: initial initial; padding: 0.2em; border: 1px solid #aaaaaa;"&gt;' ... '&lt;/th&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="padding: 0.2em; border: 1px solid #aaaaaa;"&gt;注释&lt;/td&gt;&#xD;
&lt;th style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #f2f2f2; text-align: center; background-position: initial initial; background-repeat: initial initial; padding: 0.2em; border: 1px solid #aaaaaa;"&gt;(* ... *)&lt;/th&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="padding: 0.2em; border: 1px solid #aaaaaa;"&gt;特殊序列&lt;/td&gt;&#xD;
&lt;th style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #f2f2f2; text-align: center; background-position: initial initial; background-repeat: initial initial; padding: 0.2em; border: 1px solid #aaaaaa;"&gt;&amp;nbsp;? ...&amp;nbsp;?&lt;/th&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="padding: 0.2em; border: 1px solid #aaaaaa;"&gt;除外&lt;/td&gt;&#xD;
&lt;th style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #f2f2f2; text-align: center; background-position: initial initial; background-repeat: initial initial; padding: 0.2em; border: 1px solid #aaaaaa;"&gt;-&lt;br /&gt;&lt;br /&gt;&lt;/th&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/span&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/solo/aggbug/1871734.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/solo/archive/2010/11/08/1871734.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/solo/archive/2010/09/16/1828024.html</id><title type="text">HaozesFx 更新至飞信2010 协议</title><summary type="text">前些日子发现机器人不能登陆,原来飞信2008的协议彻底不能用了.遂更新了下HaozesFx.update说明:目前可以登陆,发送接收聊天消息(登陆有验证的情况,未处理).好友增删的,没更新可能还不可以用.等有时间我会继续完善更新.2010/10/14 update:1.增加了验证码情况的处理.2.天气预报插件中的:其它:关于Fetion 2010登陆加密算法,我是看http://basiccode...</summary><published>2010-09-16T05:34:00Z</published><updated>2010-09-16T05:34:00Z</updated><author><name>Haozes</name><uri>http://www.cnblogs.com/solo/</uri></author><link rel="alternate" href="http://www.cnblogs.com/solo/archive/2010/09/16/1828024.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/solo/archive/2010/09/16/1828024.html"/><content type="html">&lt;p&gt;前些日子发现机器人不能登陆,原来飞信2008的协议彻底不能用了.遂更新了下&lt;a href="http://haozesfx.codeplex.com/SourceControl/list/changesets"&gt;HaozesFx&lt;/a&gt;.&lt;/p&gt;&#xD;
&lt;p&gt;update说明:&lt;/p&gt;&#xD;
&lt;p&gt;目前可以登陆,发送接收聊天消息(登陆有验证的情况,未处理).好友增删的,没更新可能还不可以用.等有时间我会继续完善更新.&lt;/p&gt;&#xD;
&lt;p&gt;2010/10/14 update:&lt;/p&gt;&#xD;
&lt;p&gt;1.增加了验证码情况的处理.&lt;/p&gt;&#xD;
&lt;p&gt;2.天气预报插件中的:&lt;/p&gt;&#xD;
&lt;pre&gt;&lt;span&gt;Too many automatic redirections were attempted 的错误&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;p&gt;其它:&lt;/p&gt;&#xD;
&lt;p&gt;关于Fetion 2010登陆加密算法,我是看&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://basiccoder.com/fetion2010-auth-detail.html"&gt;http://basiccoder.com/fetion2010-auth-detail.html&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;我看此人的部分C代码,然后翻译成C#的.我开始也好奇为啥网上这么快就有人知晓了登陆的算法.请教了原作者,原来飞信2010的前期还是用.Net写的,他把C#译成了C的-_-!   &lt;br /&gt;感兴趣的可以搜索Fetion2010_3.6.1810.exe,Fetion2010_3.6.2020.exe.这两个客户端还是C#写的.也许哪天再更新协议,无可反编译可用,就杯具了.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;申明:我不对HaozesFx 进行技术支持,只接受技术交流.   &lt;br /&gt;如果需要技术支持或定制,请先用RMB支持我: &lt;/p&gt;&#xD;
&lt;p&gt;支付宝帐号:&amp;nbsp; haozes(#)gmail.com&amp;nbsp; (#-&amp;gt;@)&lt;/p&gt;&lt;img src="http://www.cnblogs.com/solo/aggbug/1828024.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/solo/archive/2010/09/16/1828024.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
