锘??xml version="1.0" encoding="utf-8" standalone="yes"?>久久免费国产精品1,亚洲欧美高清,一本色道久久综合狠狠躁篇的优点 http://www.shnenglu.com/Squirrel/濮嬫湁閬擄紝閬撶敓鏃剁┖銆傛椂絀猴紝緙栫▼涔嬮槾闃熾備笉寰楅亾鑰呭け鏃剁┖錛屽緱閬撹呮椂絀虹泩浣欎互瀹屽伐銆傚叾鏈夊紓涔庯紵zh-cnSat, 11 Oct 2025 08:15:20 GMTSat, 11 Oct 2025 08:15:20 GMT60Windows緋葷粺鎬ц兘鐩戣鍣?/title><link>http://www.shnenglu.com/Squirrel/archive/2006/05/21/7458.html</link><dc:creator>Squirrel</dc:creator><author>Squirrel</author><pubDate>Sun, 21 May 2006 03:41:00 GMT</pubDate><guid>http://www.shnenglu.com/Squirrel/archive/2006/05/21/7458.html</guid><wfw:comment>http://www.shnenglu.com/Squirrel/comments/7458.html</wfw:comment><comments>http://www.shnenglu.com/Squirrel/archive/2006/05/21/7458.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/Squirrel/comments/commentRss/7458.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/Squirrel/services/trackbacks/7458.html</trackback:ping><description><![CDATA[聽聽聽鏈榪戠湅鍒版氮娼殑鐚庨拱鏈嶅姟鍣ㄧ鐞嗚蔣浠訛紝鍏朵腑鍙互瀵硅繙紼嬫湇鍔″櫒鐨凜PU鍜屽唴瀛樹嬌鐢ㄧ巼榪涜瀹炴椂鐩戣錛屽氨鍍忎換鍔$鐞嗗櫒閭f牱緇樺埗涓涓姤琛ㄣ傛垜鎺ㄦ柇浠栬涔堟槸浣跨敤SNMP鍗忚浠庡鎴鋒満鎷垮埌鏁版嵁涔嬪悗鍦ㄤ紶閫掔粰綆$悊鍣紝瑕佷箞灝辨槸浣跨敤Windows鎻愪緵鐨勬煇浜汼ystem Performence COM緇勪歡鏉ユ姄鏁版嵁銆?br />聽聽聽鏌SDN錛屼笂鏈変竴涓猄ystem Monitor鐨勪緥瀛愩傚眳鐒舵槸鐢╒BScript鏉ヨ皟涓璋冩帶鍒墮潰鏉?銆夌鐞嗗伐鍏?銆夋ц兘-銆夌郴緇熺洃瑙嗗櫒銆傛棦鐒舵槸鐢℉TML宓孷BScript錛岄偅杞崲涓哄簲鐢ㄧ▼搴忓埌涔熸柟渚匡紝灝嗘枃浠跺悗緙鍚嶆敼涓?hta錛屽嵆浠TML Application鏂瑰紡鎵撳紑錛岀敱MSHTA.exe鏉ヨВ閲婃墽琛屽氨鍙互浜嗐?br />聽聽聽涓嬮潰鐨勭▼搴忓氨鏄粠鍛戒護琛屼腑鑾峰彇瑕佺洃瑙嗙殑璁$畻鏈篒P鍦板潃鍚庯紝鍚姩System Monitor錛岀洃瑙嗕箣銆?br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff"><</span><span style="COLOR: #800000">HTML</span><span style="COLOR: #0000ff">></span><span style="COLOR: #000000"><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff"><</span><span style="COLOR: #800000">HEAD</span><span style="COLOR: #0000ff">></span><span style="COLOR: #000000"><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff"><</span><span style="COLOR: #800000">HTA:APPLICATION聽</span><span style="COLOR: #ff0000">ID</span><span style="COLOR: #0000ff">="oHTA"</span><span style="COLOR: #ff0000"><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" />聽聽聽聽APPLICATIONNAME</span><span style="COLOR: #0000ff">="myApp"</span><span style="COLOR: #0000ff">></span><span style="COLOR: #000000"><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" />聽聽聽</span><span style="COLOR: #0000ff"><</span><span style="COLOR: #800000">meta聽</span><span style="COLOR: #ff0000">http-equiv</span><span style="COLOR: #0000ff">="Content-Type"</span><span style="COLOR: #ff0000">聽content</span><span style="COLOR: #0000ff">="text/html;聽charset=gb2312"</span><span style="COLOR: #ff0000">聽</span><span style="COLOR: #0000ff">></span><span style="COLOR: #000000"><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" />聽聽聽</span><span style="COLOR: #0000ff"></</span><span style="COLOR: #800000">HEAD</span><span style="COLOR: #0000ff">></span><span style="COLOR: #000000"><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" />聽聽聽聽</span><span style="COLOR: #0000ff"><</span><span style="COLOR: #800000">BODY聽</span><span style="COLOR: #ff0000">BGCOLOR</span><span style="COLOR: #0000ff">="#C0C0C0"</span><span style="COLOR: #0000ff">></span><span style="COLOR: #000000"><br /><img id="Codehighlighter1_210_297_Open_Image" onclick="this.style.display='none'; Codehighlighter1_210_297_Open_Text.style.display='none'; Codehighlighter1_210_297_Closed_Image.style.display='inline'; Codehighlighter1_210_297_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_210_297_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_210_297_Closed_Text.style.display='none'; Codehighlighter1_210_297_Open_Image.style.display='inline'; Codehighlighter1_210_297_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedBlock.gif" align="top" />聽聽聽聽聽聽聽聽</span><span style="COLOR: #0000ff"><</span><span style="COLOR: #800000">SCRIPT聽</span><span style="COLOR: #ff0000">LANGUAGE</span><span style="COLOR: #0000ff">="VBScript"</span><span style="COLOR: #0000ff">></span><span id="Codehighlighter1_210_297_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.shnenglu.com/images/dot.gif" /></span><span id="Codehighlighter1_210_297_Open_Text"><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />聽聽</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">Sub</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">聽Monitor_OnCounterAdded(index)<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />聽聽聽聽Monitor.Counters.Item(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">1</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">).Width聽</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">聽</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">8</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />聽聽</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">End聽Sub</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />聽聽聽聽聽聽聽聽</span></span><span style="COLOR: #0000ff"></</span><span style="COLOR: #800000">SCRIPT</span><span style="COLOR: #0000ff">></span><span style="COLOR: #000000"><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" />聽聽聽聽聽聽聽聽</span><span style="COLOR: #0000ff"><</span><span style="COLOR: #800000">OBJECT聽</span><span style="COLOR: #ff0000">CLASSID</span><span style="COLOR: #0000ff">="clsid:C4D2D8E0-D1DD-11CE-940F-008029004347"</span><span style="COLOR: #ff0000">聽ID</span><span style="COLOR: #0000ff">="Monitor"</span><span style="COLOR: #ff0000">聽HEIGHT</span><span style="COLOR: #0000ff">="80%"</span><span style="COLOR: #ff0000">聽WIDTH</span><span style="COLOR: #0000ff">="100%"</span><span style="COLOR: #ff0000"><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" />聽聽聽聽聽聽聽聽聽聽聽聽VIEWASTEXT</span><span style="COLOR: #0000ff">></span><span style="COLOR: #000000"><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" />聽聽聽聽聽聽聽聽</span><span style="COLOR: #0000ff"></</span><span style="COLOR: #800000">OBJECT</span><span style="COLOR: #0000ff">></span><span style="COLOR: #000000"><br /><img id="Codehighlighter1_467_1402_Open_Image" onclick="this.style.display='none'; Codehighlighter1_467_1402_Open_Text.style.display='none'; Codehighlighter1_467_1402_Closed_Image.style.display='inline'; Codehighlighter1_467_1402_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_467_1402_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_467_1402_Closed_Text.style.display='none'; Codehighlighter1_467_1402_Open_Image.style.display='inline'; Codehighlighter1_467_1402_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedBlock.gif" align="top" />聽聽聽聽聽聽聽聽</span><span style="COLOR: #0000ff"><</span><span style="COLOR: #800000">SCRIPT聽</span><span style="COLOR: #ff0000">LANGUAGE</span><span style="COLOR: #0000ff">="VBScript"</span><span style="COLOR: #0000ff">></span><span id="Codehighlighter1_467_1402_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.shnenglu.com/images/dot.gif" /></span><span id="Codehighlighter1_467_1402_Open_Text"><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />聽聽聽聽聽聽聽聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />聽聽</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">Sub</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">聽Window_OnLoad<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />聽聽聽聽</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">On</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">聽</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">Error</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">聽</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">Resume</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">聽</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">Next</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />聽聽聽聽Monitor.ShowValueBar聽</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">聽</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">True</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />聽聽聽聽Monitor.ShowHorizontalGrid聽</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">聽</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">True</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />聽聽聽聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />聽聽聽聽Arg聽</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">聽</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">Trim</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">(聽oHTA.commandLine聽)<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />聽聽聽聽IPArgPos聽</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">聽</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">InStr</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">2</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">,聽Arg,聽</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">""</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">,聽</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">1</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">)<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />聽聽聽聽IPArg聽</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">聽</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">Trim</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">(聽</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">right</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">(聽Arg,聽</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">len</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">(Arg)</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">-</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">IPArgPos)聽)<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />聽聽聽聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />聽聽聽聽IPStrings聽</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">聽</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">split</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">(聽IPArg,聽</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">聽</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">,聽</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">-</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">1</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">,聽</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">1</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">聽)<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />聽聽聽聽</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">for</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">聽i聽</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">聽</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">0</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">聽</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">to</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">聽</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">uBound</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">(IPStrings)<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />聽聽聽聽Monitor.Counters.Add(聽</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">\\</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">聽</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">+</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">聽IPStrings(i)聽</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">+</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">聽</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">\Processor(_Total)\%聽Processor聽Time</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">聽)<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />聽聽聽聽Monitor.Counters.Add(聽</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">\\</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">聽</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">+</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">聽IPStrings(i)聽</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">+</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">聽</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">\Memory\Available聽MBytes</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">聽)<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />聽聽聽聽Monitor.Counters.Add(聽</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">\\</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">聽</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">+</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">聽IPStrings(i)聽</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">+</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">聽</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">PhysicalDisk(_Total)\Avg.聽Disk聽Queue聽Length</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">聽)<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />聽聽聽聽Monitor.Counters.Add(聽</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">\\</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">聽</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">+</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">聽IPStrings(i)聽</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">+</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">聽</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">\LogicalDisk(_Total)\%聽Free聽Space</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">聽)<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />聽聽聽聽Monitor.Counters.Add(聽</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">\\</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">聽</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">+</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">聽IPStrings(i)聽</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">+</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">聽</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">\Network聽Interface(*)\Bytes聽Total/sec</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">聽)<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />聽聽聽聽</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">Next</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />聽聽聽聽</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">'</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">Monitor.Counters.Add(聽"\Process(*)\%聽Processor聽Time")</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5"><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">聽聽聽聽Monitor.DisplayType</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">sysmonLineGraph<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />聽聽聽聽Monitor.GraphTitle</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">聽</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">璁$畻鏈虹郴緇熸ц兘鐩戣</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />聽聽</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">End聽Sub</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align="top" />聽聽<br /><img src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />聽聽聽聽聽聽聽聽</span></span><span style="COLOR: #0000ff"></</span><span style="COLOR: #800000">SCRIPT</span><span style="COLOR: #0000ff">></span><span style="COLOR: #000000"><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" />聽聽聽聽</span><span style="COLOR: #0000ff"></</span><span style="COLOR: #800000">BODY</span><span style="COLOR: #0000ff">></span><span style="COLOR: #000000"><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff"></</span><span style="COLOR: #800000">HTML</span><span style="COLOR: #0000ff">></span><span style="COLOR: #000000"><br /><img src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align="top" /></span></div>聽聽聽涓嶇煡閬撳ぇ瀹舵湁娌℃湁浣跨敤榪嘋OM緇勪歡灝嗚繖鏍風殑涓滆タ宓屽埌C++紼嬪簭涓傚鏋滄湁鐨勮瘽錛屼笉濡ㄥ彂琛ㄤ笂鏉ョ湅鐪嬨?img src ="http://www.shnenglu.com/Squirrel/aggbug/7458.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/Squirrel/" target="_blank">Squirrel</a> 2006-05-21 11:41 <a href="http://www.shnenglu.com/Squirrel/archive/2006/05/21/7458.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>Windows鍑嵁綆$悊http://www.shnenglu.com/Squirrel/archive/2006/05/20/7445.htmlSquirrelSquirrelSat, 20 May 2006 11:54:00 GMThttp://www.shnenglu.com/Squirrel/archive/2006/05/20/7445.htmlhttp://www.shnenglu.com/Squirrel/comments/7445.htmlhttp://www.shnenglu.com/Squirrel/archive/2006/05/20/7445.html#Feedback0http://www.shnenglu.com/Squirrel/comments/commentRss/7445.htmlhttp://www.shnenglu.com/Squirrel/services/trackbacks/7445.html聽聽聽鍦╓indows XP鍜孲erver 2003 涓兘宸插瓨鍦ㄤ簡鈥滃瓨鍌ㄧ殑鐢ㄦ埛鍚嶅拰瀵嗙爜鈥濄傚湪XP涓紝閫氳繃鎺у埗闈㈡澘涓殑鐢ㄦ埛甯愭埛-銆夐夋嫨鐢ㄦ埛-銆夌鐞嗘垜鐨勭綉緇滃瘑鐮併傝屽湪Server 2003涓紝鍒欏湪鎺у埗闈㈡澘涓嬬洿鎺ユ湁鈥滃瓨鍌ㄧ殑鐢ㄦ埛鍚嶅拰瀵嗙爜鈥濋」銆?br />聽聽聽鎴戜滑璋冪敤涓浜汚PI錛屽WTSOpenServer錛孮ueryServiceStatus錛孨etUserEnum絳夌瓑娑夊強鍒癛PC鐨勶紝鍙褰撳墠鐢ㄦ埛瀛樺偍鏈夌洰鏍囪繙紼嬫満鐨勬潈闄愬悎閫傜殑鍑嵁錛屽垯榪欎簺API灝變笉浼氬洜浜х敓ERROR_ACCESS_DENIED鑰屾墽琛屽け璐ャ傚洜涓烘垜榪樹笉Windows鐨勫簳灞傛槸濡備綍榪涜鎺у埗鐨勶紝姣斿錛屾槸鍚﹁皟鐢ㄤ簡SSPI錛屾墍浠ワ紝鎵ц榪欎簺API鏃訛紝鎴戝彧鑳藉悜鐢ㄦ埛瑕佺鐞嗗憳鍙d護銆備絾鍙堜笉鍙兘姣忔閮借鐢ㄦ埛鍘昏緭鍏ヤ竴閬嶇敤鎴峰悕鍜屽瘑鐮侊紝閭d箞錛屼篃灝遍渶瑕佷繚瀛樺瘑鐮併?br />聽聽聽鏃㈢劧淇濆瓨浜嗗瘑鐮侊紝灝卞繀欏昏冭檻鍒犻櫎瀵嗙爜錛岄偅涔堝瘑鐮佺鐞嗙殑闂涔熷氨鏉ヤ簡銆傝鍒板瘑鐮佺鐞嗭紝鎴戝湪鍓嶄簺騫寸湅鐢佃鐨勬椂鍊欙紝鐪嬪埌浠嬬粛涓涓彨浠涔堚滅綉緇滆瀮锜光濈殑緗戠珯錛屼粬灝辨槸涓撻棬鎻愪緵涓漢瀵嗙爜綆$悊鐨勶紝褰撴椂鎴戝氨鎯籌紝鏈変漢浼氬幓鎶婅嚜宸辯殑瀵嗙爜浜ょ粰鍒漢鎵撶悊鍚楋紵榪欏ソ鍍忎笉澶у彲鑳姐備綍鏉ヤ篃灝辨病鍚埌浠涔堢綉緇滆瀮锜規í琛岀殑娑堟伅銆?br />聽聽聽鐜板湪鎴戠殑欏圭洰涓紝濡傛灉鐢ㄦ埛鏈変簡涓鍙版満鍣紙PC錛夌殑瀵嗙爜錛岄偅涔堬紝浠栧氨鏈変簡N鍙版湇鍔″櫒鐨勭鐞嗗憳鏉冮檺銆傝繖褰撶劧鏄笉琚厑璁哥殑浜嗐傛庝箞鍔烇紵
聽聽聽鎵句簡涓浜汚PI錛屾槸Authentication Functions緋誨垪鐨勩備簬鏄紝涓嬮潰涓涓皬瀹為獙浠g爜灝辨槸鎯蟲潵鏋氫婦鐢ㄦ埛鍑嵁鐨勩?br />
#include聽<windows.h>
#include聽
<WinCred.h>
int聽main(){

聽聽DWORD聽dwCount聽
=0;
聽聽PCREDENTIAL聽
*聽pCredArray聽=聽NULL聽;

聽聽
if(聽CredEnumerate(聽NULL,聽0,聽&dwCount,聽&pCredArray聽)聽){

聽聽聽聽
for(聽DWORD聽dwIndex聽=0;聽dwIndex聽<聽dwCount;聽dwIndex++){
聽聽聽聽聽聽PCREDENTIAL聽pCredential聽
=聽pCredArray[dwIndex];

聽聽聽聽聽聽cout聽
<<"*********************************\r\n";

聽聽聽聽聽聽cout
<<聽聽"Flags:聽"<<聽pCredential->Flags聽<<"\n"
聽聽聽聽聽聽聽聽聽聽
<<聽聽"Type:聽聽"<<聽聽pCredential->Type聽<<"\n"
聽聽聽聽聽聽聽聽聽聽
<<聽聽"Name:聽聽"<<聽pCredential->TargetName聽<<"\n"
聽聽聽聽聽聽聽聽聽聽
<<聽聽"Persist:聽"<<聽pCredential->Persist聽聽<<聽聽"\n"
聽聽聽聽聽聽聽聽聽聽
<<聽聽"User:聽聽"<<聽聽pCredential->UserName聽<<聽聽"\n";

聽聽聽聽聽聽cout聽
<<"Data:聽聽\r\n";

聽聽聽聽聽聽
char聽szHexBuffer[256]聽="";
聽聽聽聽聽聽
char聽szAsciiBuffer[256]聽="";
聽聽聽聽聽聽
char聽szHex[16];
聽聽聽聽聽聽
char聽szAscii[2];
聽聽聽聽聽聽DWORD聽dwByte;

聽聽聽聽聽聽
for聽(dwByte聽=0;聽dwByte聽<聽pCredential->CredentialBlobSize;聽dwByte++)
聽聽聽聽聽聽
{
聽聽聽聽聽聽聽聽BYTE聽byte1聽
=聽pCredential->CredentialBlob[dwByte];
聽聽聽聽聽聽聽聽sprintf(szHex,聽
"%2.2X聽",聽byte1);
聽聽聽聽聽聽聽聽szAscii[
1]聽='\0';

聽聽聽聽聽聽聽聽
if聽(byte1聽>=32&&聽byte1聽<128)
聽聽聽聽聽聽聽聽聽聽szAscii[
0]聽=聽(UCHAR)byte1;
聽聽聽聽聽聽聽聽
else
聽聽聽聽聽聽聽聽聽聽szAscii[
0]聽='';

聽聽聽聽聽聽聽聽strcat(szHexBuffer,聽szHex);
聽聽聽聽聽聽聽聽strcat(szAsciiBuffer,聽szAscii);

聽聽聽聽聽聽聽聽
if聽(dwByte聽==聽pCredential->CredentialBlobSize聽-1
聽聽聽聽聽聽聽聽聽聽
||聽dwByte聽%16==15)
聽聽聽聽聽聽聽聽
{
聽聽聽聽聽聽聽聽聽聽printf(
"%-50s聽%s\r\n",聽szHexBuffer,聽szAsciiBuffer);
聽聽聽聽聽聽聽聽聽聽szHexBuffer[
0]聽='\0';
聽聽聽聽聽聽聽聽聽聽szAsciiBuffer[
0]聽='\0';
聽聽聽聽聽聽聽聽}


聽聽聽聽聽聽}


聽聽聽聽聽聽cout聽
<<"*********************************\r\n";

聽聽聽聽}


聽聽聽聽CredFree(聽pCredArray聽);
聽聽}

聽聽
//system(聽"rundll32聽keymgr.dll,KRShowKeyMgr");
聽聽return0;
}

聽聽聽濂藉儚鍑嵁鏁版嵁榪樻病鑳芥墦鍑烘潵銆?br />
聽聽聽鍚庢潵錛屾湰鐫鈥滅紪紼嬬殑鏈楂樺鐣屽氨鏄笉緙栫▼鈥濈殑綺劇錛屾垜鎯籌紝濡傛灉鐩存帴鎶奧indows鐨勯偅涓滃瓨鍌ㄧ殑鐢ㄦ埛鍚嶅拰瀵嗙爜鈥濆璇濇璋冨嚭鏉ョ敤鐢ㄤ笉涔熷彲浠ュ悧銆傜敤ProcessExplorer錛屾壘鍒頒竴涓彨keymgr.dll鐨勪笢瑗匡紝鍡紝浼拌瀵硅瘽妗嗗氨鍦ㄩ噷闈€?br />聽聽聽鍦ㄢ滆繍琛屸濅腑杈撳叆鈥渃ontrol keymgr.dll鈥濇垨鈥渞undll32 keymgr.dll,KRShowKeyMgr鈥濓紝瀵硅瘽妗嗗氨鍑烘潵浜嗐?br />聽聽聽鍙堢渷浜嬩簡錛?img src ="http://www.shnenglu.com/Squirrel/aggbug/7445.html" width = "1" height = "1" />

Squirrel 2006-05-20 19:54 鍙戣〃璇勮
]]>
濡傛欏圭洰綆$悊http://www.shnenglu.com/Squirrel/archive/2006/05/19/7410.htmlSquirrelSquirrelFri, 19 May 2006 07:56:00 GMThttp://www.shnenglu.com/Squirrel/archive/2006/05/19/7410.htmlhttp://www.shnenglu.com/Squirrel/comments/7410.htmlhttp://www.shnenglu.com/Squirrel/archive/2006/05/19/7410.html#Feedback0http://www.shnenglu.com/Squirrel/comments/commentRss/7410.htmlhttp://www.shnenglu.com/Squirrel/services/trackbacks/7410.html聽聽聽榪欏嚑澶╁洜涓轟竴涓」鐩殑浜嬫儏闈炲父閮侀椃銆傛湰鏉ヤ粠搴曞眰鍒扮晫闈㈣緵杈涜嫤鑻﹀湴鍐欎簡涓や釜鏈堢殑涓滆タ錛岀瓑鍒扮涓涓増鏈彂甯冧箣鍚庯紝鎵璋撶殑欏圭洰緇忕悊灞呯劧浠ヤ負澶у姛鍛婃垚錛岃鍓╀笅鐨勫彧鏄淮鎶ゃ?br />聽聽聽聽浣滀負涓涓」鐩粡鐞嗭紝瀵圭▼搴忓憳寮鍙戠殑浜у搧閮戒笉浜嗚В錛屼篃灝辯畻浜嗭紝浣犳悶濂戒綘鐨勮繘搴︽帶鍒訛紝浣滃ソ涓庡叾浠栭儴闂ㄤ箣闂寸殑鎺ュ彛錛岄偅涔熶笉閿欍傚彲鏄繖浣嶄粊鍏勮繕瑕佷笉鏃跺湴騫查鎶鏈笂闈㈢殑浜嬫儏銆傛寜鐓т粬鐨勫啓Linux瀛楃鍛戒護鐣岄潰紼嬪簭鐨勬濊礬鏉ユ寚鎸indows鍥懼艦紼嬪簭鐨勮璁°備竴鍒囬兘寮鴻皟鎵璋撶殑鈥滅畝鍗曗濄傝鐭ラ亾錛岀畝鍗曟槸瀵圭敤鎴瘋岃█鐨勶紝瀵圭▼搴忓憳鏉ヨ錛岀畝鍗曠殑璁捐涓嶈兘瑙e喅鎵鏈夌殑闂銆備笉瑕佹妸Linux涓嬮偅縐嶆墍璋撶殑灝忚岀畝鍗曡屸滃己鎮嶁濈殑宸ュ叿鍙互瑙e喅鎵鏈夐渶姹傜殑鎬濇兂鏉ユ寚瀵奸拡瀵筗indows鐢ㄦ埛鐨勮璁★紒
鏇存悶絎戠殑鏄紝褰撴垜鎻愬嚭紼嬪簭涓湁瑕佷慨鏀圭殑鍦版柟錛屽茍璇㈤棶涓昏瀵歸偅浜涙柟闈㈣繘琛屼紭鍖栨椂錛屼粬灞呯劧鎻愬嚭浣犱滑鐨勪換鍔″氨鏄妸鐜板湪鐨勪唬鐮佸帇鍒?涓囪浠ヤ笅錛堢幇鍦ㄤ唬鐮佽鏁頒負1涓?宸﹀彸錛夛紒鍏剁悊鐢辨槸渚夸簬綆$悊錛侊紒鎴戠湡鏄摥絎戜笉寰楋紝鎴戜笉鐭ラ亾澶у鏄惁閬囧埌榪欑鏍峰瓙鐨勯」鐩粡鐞嗐傛湁榪欐牱綆$悊杞歡寮鍙戠殑鍚楋紵錛侊紒
聽聽聽鏇存皵浜虹殑鏄紝褰撴垜鍚戜粬鎻愬嚭淇敼鎰忚錛屽茍寤鴻瀹炵幇涓浜涘墠鏈熻璁″洜榪涘害闂鑰岀爫鎺夌殑浜偣鍔熻兘鏃訛紝浠栫姽璞簡涓涓嬶紝鐒跺悗璇達紝浣犱滑鍏堝涔犲惂錛侊紙鎵璋撶殑瀛︿範涓嶈繃鏄釜騫屽瓙錛屽氨鏄浣犻棽鐫銆傛垜鏉ュ叕鍙鎬粠鏉ュ氨娌℃湁浠涔堝煿璁紒錛?br />聽聽聽闈狅紝椋熷悰涔嬬錛屽繝鍚涗箣浜嬨傛垜鏉ュ叕鍙告槸鍋氫簨鏉ョ殑錛屼笉鏄疶MD浼戞伅錛岀枟鍏伙紝絳夋鏉ョ殑錛佹槸鍙繊錛屽涓嶅彲蹇嶏紵錛?br />聽聽聽浼拌鍥藉唴鐨勫皬浼佷笟錛岀壒鍒槸灝忚蔣浠朵紒涓氶兘涓涓牱錛屾壘鍑犱釜浜哄啓鐐逛唬鐮侊紝鐒跺悗灝卞幓楠楀浗瀹訛紝楠楄佺櫨濮撶殑閽憋紝鍒版墜涔嬪悗錛屽氨鎶婅繖鍑犱釜紼嬪簭鍛樹竴鎵旓紝浠栨墠涓嶈冭檻浠涔堜漢鍔涜祫婧愮殑闂鍛€?br />楠楀瓙錛?/p>




Squirrel 2006-05-19 15:56 鍙戣〃璇勮
]]>
緙栫▼璇█鍙戝睍鍘嗙▼http://www.shnenglu.com/Squirrel/archive/2006/05/16/7252.htmlSquirrelSquirrelTue, 16 May 2006 05:52:00 GMThttp://www.shnenglu.com/Squirrel/archive/2006/05/16/7252.htmlhttp://www.shnenglu.com/Squirrel/comments/7252.htmlhttp://www.shnenglu.com/Squirrel/archive/2006/05/16/7252.html#Feedback0http://www.shnenglu.com/Squirrel/comments/commentRss/7252.htmlhttp://www.shnenglu.com/Squirrel/services/trackbacks/7252.html

Squirrel 2006-05-16 13:52 鍙戣〃璇勮
]]>
Windows涓?ACE涓殑鍦板潃閲嶇敤http://www.shnenglu.com/Squirrel/archive/2006/05/15/7215.htmlSquirrelSquirrelMon, 15 May 2006 10:51:00 GMThttp://www.shnenglu.com/Squirrel/archive/2006/05/15/7215.htmlhttp://www.shnenglu.com/Squirrel/comments/7215.htmlhttp://www.shnenglu.com/Squirrel/archive/2006/05/15/7215.html#Feedback2http://www.shnenglu.com/Squirrel/comments/commentRss/7215.htmlhttp://www.shnenglu.com/Squirrel/services/trackbacks/7215.html
聽聽聽鎴戞墍閬囧埌榪囩殑闂鏄湪ACE_SOCK_Dgram_Bcast鐨勭4涓瀯閫犲弬鏁皉euse_addr璧嬪間負1錛屼絾寰堥仐鎲撅紝鍦╓indows騫沖彴涓婏紝灝辨槸涓嶈兘浣跨鍙i噸鐢ㄧ敓鏁堛備嬌鐢╯etsockopt鏉ュ己鍒舵湇鐢ㄧ鍙o紝浠嶇劧鏃犳晥錛涚敤ACE_SOCK_Dgram涔熻瘯榪囦簡錛屽悓鏍鋒棤鏁堛侫CE鐨勪唬鐮佷腑濡傛槸璇達細

// If we are using winsock2 then the SO_REUSEADDR feature is broken
// SO_REUSEADDR=1 behaves like SO_REUSEPORT=1. (SO_REUSEPORT is an
// extension to sockets on some platforms)
// We define SO_REUSEPORT here so that ACE_OS::setsockopt() can still
// allow the user to specify that a socketaddr can *always* be reused.
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽鈥斺?config-win32-common.h"

聽聽聽鍦╓insock2涓笉鏀寔SO_REUSEADDR,聽鍙槸鎴戣鐢ㄧ殑鍙槸绔彛閲嶇敤鑰屽凡銆?br />
聽聽聽涓嶈繃ACE_SOCK_Dgram_Mcast鍊掓槸鏈夋晥錛屽彲鎯滐紝涓嶆槸涓涓蹇點?br />
聽聽聽鎴戝悗鏉ョ敤寰堜笉鐖界殑鍔炴硶鎵嶅簲浠樿繃鍘伙紝鐢╯ocket鍑芥暟鍏堝垱寤哄ソSOCKET鍙ユ焺鍚庯紝鍐嶇敤ACE_SOCK_Dgram::set_handle璁劇疆銆傛尯閮侀椃鐨勶紝涓嶇煡閬撴湁娌℃湁濂界殑鏂規硶鑳借В鍐蟲垨瑙i噴銆?br />

Squirrel 2006-05-15 18:51 鍙戣〃璇勮
]]>
[杞澆]鐢˙oost.Python鏋勫緩娣峰悎緋葷粺 http://www.shnenglu.com/Squirrel/archive/2006/05/15/7193.htmlSquirrelSquirrelMon, 15 May 2006 07:44:00 GMThttp://www.shnenglu.com/Squirrel/archive/2006/05/15/7193.htmlhttp://www.shnenglu.com/Squirrel/comments/7193.htmlhttp://www.shnenglu.com/Squirrel/archive/2006/05/15/7193.html#Feedback2http://www.shnenglu.com/Squirrel/comments/commentRss/7193.htmlhttp://www.shnenglu.com/Squirrel/services/trackbacks/7193.html

鐩綍

鎽樿

Boost錛嶱ython鏄竴涓紑婧愮殑C++紼嬪簭搴擄紝鎻愪緵綾諱技IDL鐨勬帴鍙f潵鎶奀++綾誨拰鍑芥暟緇戝畾鍒癙ython銆傚熷姪浜嶤++寮哄ぇ鐨勭紪璇戞椂鍐呯渷(introspection)鑳藉姏鍜屾渶鏂扮殑鍏冪紪紼?metaprogramming)鎶鏈紝瀹冨畬鍏ㄧ敤C++鏉ュ疄鐜幫紝鑰屼笉鐢ㄥ紩鍏ユ柊鐨勮娉曘侭oost.Python涓板瘜鐨勭壒鎬у拰楂樼駭鎺ュ彛浣夸粠搴曞眰璧鋒寜娣峰悎緋葷粺鐨勬柟寮忚璁$粍浠舵垚涓哄彲鑳斤紝浠庤屼嬌紼嬪簭鍛樺彲浠ヨ交鏉懼拰榪炶瘡鐨勫悓鏃朵嬌鐢–++楂樻晥鐨勭紪璇戞椂澶氭佸拰Python鏋佸叾鏂逛究鐨勮繍琛屾椂澶氭併?/p>

綆浠?/a>

浣滀負涓ら棬璇█錛宲ython鍜孋++鍦ㄥ緢澶氭柟闈笉涓鏍楓侰++琚紪璇戜負鏈哄櫒鐮侊紝python琚В閲?interpreted)鎵ц銆侾ython鐨勫姩鎬佺被鍨?type)緋葷粺緇忓父琚涓烘槸鐏墊椿鎬х殑鍩虹錛孋++鐨勯潤鎬佺被鍨嬫槸鏁堢巼鐨勫熀鐭熾侰++鏈夊鏉傝壈娣辯殑緙栬瘧鏃跺厓璇█(meta-language)錛岃屽湪python閲岋紝瀹為檯涓婁竴鍒囬兘鍦ㄨ繍琛屾椂鍙戠敓銆傜劧鑰屽寰堝紼嬪簭鍛樻潵璇達紝榪欎簺涓嶅悓鎭板ソ鎰忓懗鐫Python鍜孋++鏄郊姝ょ殑瀹岀編琛ヨ凍銆侾ython 紼嬪簭閲岀殑鎬ц兘鐡墮閮ㄥ垎鍙互鐢–++鏉ラ噸鍐欙紝浠庤屾渶澶у寲閫熷害銆傚己澶х殑C++紼嬪簭搴撶殑浣滆呴夋嫨Python浣滀負涓棿浠?middleware)璇█錛屼粠鑰岃幏寰楃伒媧葷殑緋葷粺闆嗘垚鑳藉姏銆傛澶栵紝琛ㄩ潰鐨勪笉鍚屾帺鐩栦簡浜岃呴潪甯哥被浼肩殑涓浜涘湴鏂癸細

鑰冭檻鍒癙ython涓板瘜鐨勨機'鍗忎綔API錛屽師鍒欎笂鎶奀++鐨勭被鍨嬪拰鍑芥暟浠ョ被浼間簬鏆撮湶緇機++鐨勬帴鍙f毚闇茬粰Python鏄彲鑳界殑銆傜劧鑰岋紝鍗曟槸Python鎻愪緵鐨勮繖縐嶈鏂藉闆嗘垚C++鐨勬敮鎸佹瘮杈冨急銆傚拰C++錛孭ython鐩告瘮錛屸機'鐨勬娊璞℃満鍒墮潪甯稿垵綰э紝鑰屼笖瀹屽叏涓嶆敮鎸佸紓甯稿鐞嗐傗機'鎵╁睍妯″潡鐨勪綔鑰呭繀欏繪墜鍔ㄧ鐞嗗紩鐢ㄨ鏁幫紝榪欎笉浣嗚浜烘伡鐏殑楹葷儲鍜屽崟璋冿紝榪樻瀬搴﹀鏄撳嚭閿欍備紶緇熺殑鎵╁睍妯″潡瀹規槗浜х敓閲嶅鐨勬牱鏉夸唬鐮?boilerplate code)錛屼粠鑰岄毦浜庣淮鎶わ紝灝ゅ叾鏄鍖呰鐨凙PI寰堝鏉傛椂銆?/p>

涓婅堪闄愬埗瀵艱嚧浜嗕竴浜涘寘瑁呯郴緇熺殑寮鍙戙係WIG_ 鍙兘鏄泦鎴怌/C++鍜孭ython鐨勫寘瑁呯郴緇熶腑鏈嫻佽鐨勩備竴涓洿榪戠殑渚嬪瓙鏄?SIP 錛屽畠涓撻棬璁捐鏉ユ彁渚?Qt 鍥懼艦鐢ㄦ埛鐣岄潰搴撶殑Python鎺ュ彛銆係WIG鍜孲IP閮藉紩鍏ヤ簡瀹冧滑涓撴湁鐨勮璦鏉ュ疄鐜拌璦闂寸粦瀹氥傝繖褰撶劧鏈夊畠鐨勫ソ澶勶紝浣嗕笉寰椾笉搴斾粯涓夌涓嶅悓鐨勮璦(Python錛孋/C++鍜屾帴鍙h璦)涔熷甫鏉ヤ簡瀹為檯鐨勫拰蹇冪悊涓婄殑鍥伴毦銆?CXX 杞歡鍖呭睍紺哄嚭瀹冩槸涓涓湁瓚g殑鍖呰緋葷粺銆傚畠璇存槑浜嗚嚦灝戜竴閮ㄤ喚Python 鈥楥鈥?API鍙互閫氳繃鐢ㄦ埛鍙嬪ソ寰楀鐨凜++鎺ュ彛鏉ュ寘瑁呭拰琛ㄧ幇銆傜劧鑰岋紝鍜孲WIG鍜孲IP涓嶄竴鏍鳳紝CXX涓嶆敮鎸佹妸C++綾誨寘瑁呮垚鏂扮殑Python綾誨瀷銆?/p>

Boost.Python 鐨勭壒鎬у拰鐩爣鍜屽緢澶氳繖鏍風殑緋葷粺鏈夌浉褰撶▼搴︾殑閲嶅彔銆傚氨鏄錛孊oost.Python璇曞浘鏈澶у寲渚垮埄鎬у拰鐏墊椿鎬э紝鑰屼笉寮曞叆鍗曠嫭鐨勫寘瑁呰璦銆傜浉鍙嶏紝瀹冨湪騫曞悗鐢ㄩ潤鎬佸厓緙栫▼鎶鏈鐞嗗緢澶氬鏉傞棶棰橈紝璧嬩簣浜嗙敤鎴烽氳繃楂樼駭C++鎺ュ彛鏉ュ寘瑁匔++綾誨拰鍑芥暟鐨勮兘鍔涳紝Boost.Python涔熷湪濡備笅棰嗗煙瓚呰秺浜嗘棭鏈熺殑緋葷粺錛?/p>

  • C++铏氬嚱鏁版敮鎸侊紝铏氬嚱鏁板彲浠ョ敤Python鏉ヨ鐩?override)
  • 鍦ㄦ暣涓敓鍛藉懆鏈熷唴瀵逛綆綰ф寚閽堝拰寮曠敤榪涜鍏ㄩ潰綆$悊鐨勮鏂?
  • 瀵規妸鎵╁睍(extensions)緇勭粐鎴怭ython packages鐨勬敮鎸侊紝閫氳繃涓績娉ㄥ唽琛?central registry)鏉ヨ繘琛岃璦闂寸被鍨嬭漿鎹?
  • 瀹夊叏鑰屼究鍒╃殑榪炴帴寮哄ぇ鐨凱ython搴忓垪鍖栧紩鎿?pickle)鐨勬満鍒?
  • C++鐨刲value鍜宺value鐨勪竴鑷寸殑澶勭悊瑙勫垯錛岃繖鍙兘鏉ヨ嚜瀵筆ython鍜孋++涓よ呯殑綾誨瀷緋葷粺鐨勬繁鍏ョ悊瑙c?

榧撹垶Boost.Python寮鍙戠殑鍏抽敭鍙戠幇鏄紝浼犵粺鎵╁睍寮鍙戜腑鐨勫ぇ閲忔牱鏉夸唬鐮侀兘鍙互閫氳繃C++緙栬瘧鏃跺唴鐪佹潵娑堥櫎銆傝鍖呰鐨凜++鍑芥暟鐨勬瘡涓弬鏁伴兘蹇呴』鏍規嵁鍙傛暟綾誨瀷浠嶱ython瀵硅薄閲屽彇鍑烘潵銆傜被浼煎湴錛屽嚱鏁拌繑鍥炲肩殑綾誨瀷鍐沖畾浜嗚繑鍥炲煎浣曚粠C++杞崲鎴怭ython銆傚弬鏁扮被鍨嬪拰榪斿洖鍊肩被鍨嬪綋鐒墮兘鏄瘡涓嚱鏁扮殑綾誨瀷鐨勪竴閮ㄥ垎錛屾鏄粠榪欓噷錛孊oost.Python鎺ㄥ鍑轟簡澶ч儴鍒嗛渶瑕佺殑淇℃伅銆?/p>

榪欑鏂規硶瀵煎悜浜?鐢ㄦ埛寮曞鐨勫寘瑁?/em> 錛氬敖鍙兘鐨勭敤綰疌++鐨勬鏋剁洿鎺ヤ粠瑕佸寘瑁呯殑浠g爜閲屽彇寰椾俊鎭紝榪欎互澶栫殑淇℃伅鐢辯敤鎴鋒樉寮忔彁渚涖傚ぇ澶氭暟寮曞鏄嚜鍔ㄧ殑錛屽緢灝戦渶瑕佺湡姝g殑騫叉秹銆傚洜涓哄啓鎺ュ彛瑙勮寖鍜屽啓琚毚闇茬殑浠g爜鐨勬槸鍚屼竴闂ㄥ叏鍔熻兘璇█錛屽綋闇瑕佸彇寰楁帶鍒舵椂鐢ㄦ埛鏈変簡絀哄墠寮哄ぇ鐨勮兘鍔涖?/p>

Boost.Python 璁捐鐩爣

Boost.Python鐨勯瑕佺洰鏍囨槸璁╃敤鎴峰彧鐢–++緙栬瘧鍣ㄥ氨鑳藉悜Python鏆撮湶C++綾誨拰鍑芥暟銆傚ぇ浣撴潵璁詫紝鍏佽鐢ㄦ埛鐩存帴浠嶱ython鎿嶄綔C++瀵硅薄銆?/p>

鐒惰岋紝鏈変竴鐐瑰緢閲嶈錛岄偅灝辨槸涓嶈 榪囦簬 鎸夊瓧闈㈢炕璇戞墍鏈夋帴鍙o細蹇呴』鑰冭檻姣忕璇█鐨勬儻鐢ㄨ銆備緥濡傦紝铏界劧C++鍜孭ython閮芥湁榪唬鍣ㄧ殑姒傚康錛岃〃杈炬柟寮忓嵈寰堜笉涓鏍楓侭oost.Python蹇呴』鑳借繛鎺ヨ繖浜涗笉鍚岀殑鎺ュ彛銆?/p>

蹇呴』鎶奝ython鐢ㄦ埛鍜孋++鎺ュ彛鐨勫井灝忚鐢ㄩ犳垚鐨勫穿婧冮殧紱匯傚嚭浜庡悓鏍峰師鍥狅紝搴旇鎶奀++鐢ㄦ埛鍜屼綆綰ython 鈥楥鈥?API闅旂錛屽鏄撳嚭閿欑殑C鎺ュ彛錛屾瘮濡傛墜鍔ㄥ紩鐢ㄨ鏁扮鐞嗭紝鍘熷鐨?raw)PyObject鎸囬拡錛屽簲璇ョ敤鏇村姞鍋ュ.鐨?more-robust)鏇夸唬鐗╂潵鍙栦唬銆?/p>

鏀寔鍩轟簬緇勪歡鐨勫紑鍙戞槸鑷沖叧閲嶈鐨勶紝鍥犳琚毚闇插湪涓涓墿灞曟ā鍧楅噷鐨凜++綾誨瀷搴旇鑳藉琚紶閫掔粰琚毚闇插湪鍙︿竴涓ā鍧椾腑鐨勫嚱鏁幫紝鑰屼笉涓㈠け閲嶈鐨勪俊鎭紝姣斿璇碈++緇ф壙鍏崇郴銆?/p>

鏈鍚庯紝鎵鏈夌殑鍖呰蹇呴』鏄?闈炰鏡鍏ョ殑(non-intrusive) 錛屼笉鑳戒慨鏀圭敋鑷崇湅涓嶅埌鍘熷鐨凜++浠g爜銆傚鍙兘鐪嬭瀹冨ご鏂囦歡鍜屼簩榪涘埗鏂囦歡鐨勭涓夋柟錛岀幇鏈夌殑C++搴撳繀欏繪槸鍙寘瑁呯殑銆?/p>

Hello Boost.Python World

鐜板湪鏉ラ瑙堜竴涓婤oost.Python錛屽茍鐪嬬湅瀹冨浣曟敼榪汸ython鐨勫師濮嬪寘瑁呭姛鑳姐備笅闈㈡槸鎴戜滑鎯蟲毚闇茬殑涓涓嚱鏁?

char const* greet(unsigned x)
{
   static char const* const msgs[] = { "hello"錛?Boost.Python"錛?world!" };

   if (x > 2)
       throw std::range_error("greet: index out of range");

   return msgs[x];
}

鐢≒ython鐨凜 API鍜屾爣鍑咰++鏉ュ寘瑁呰繖涓嚱鏁幫紝鎴戜滑闇瑕佸儚榪欐牱:

extern "C" // 鎵鏈塒ython浜や簰閮戒嬌鐢–閾炬帴鍜岃皟鐢ㄤ範鎯?
{
    // 澶勭悊鍙傛暟/緇撴灉杞崲鍜屾鏌ョ殑鍖呰灞?
    PyObject* greet_wrap(PyObject* args錛孭yObject * keywords)
    {
         int x;
         if (PyArg_ParseTuple(args錛?i"錛?amp;x))    // 鍙栧嚭/媯鏌ュ弬鏁?
         {
             char const* result = greet(x);      // 璋冪敤琚寘瑁呯殑鍑芥暟
             return PyString_FromString(result); // 緇撴灉杞崲鎴怭ython
         }
         return 0;                               // 鍙戠敓浜嗛敊璇?
    }

    // 寰呭寘瑁呭嚱鏁拌〃錛屽嚱鏁扮敤榪欎釜妯″潡鏉ユ毚闇?
    static PyMethodDef methods[] = {
        { "greet"錛実reet_wrap錛孧ETH_VARARGS錛?return one of 3 parts of a greeting" }
        錛寋 NULL錛孨ULL錛?錛孨ULL } // sentinel
    };

    // 妯″潡鍒濆鍖栧嚱鏁?
    DL_EXPORT init_hello()
    {
        (void) Py_InitModule("hello"錛宮ethods); // 娣誨姞鎴愬憳鍑芥暟(method)鍒版ā鍧?
    }
}

鐜板湪鐪嬬湅鎴戜滑浣跨敤Boost.Python鏉ユ毚闇插畠鏃剁殑鍖呰浠g爜:

#include <boost/python.hpp>
using namespace boost::python;
BOOST_PYTHON_MODULE(hello)
{
    def("greet"錛実reet錛?return one of 3 parts of a greeting");
}

涓嬮潰鏄嬌鐢ㄥ畠鐨勪唬鐮?

>>> import hello

>>> for x in range(3):
...     print hello.greet(x)
...
hello
Boost.Python
world!

C API鐗堟湰瑕佸啑闀跨殑澶氾紝姝ゅ錛屼竴浜涘畠娌℃湁姝g‘澶勭悊鐨勫湴鏂瑰煎緱鎻愬埌錛?/p>

  • 鍘熸潵鐨勫嚱鏁版帴鍙楁棤絎﹀彿鏁存暟錛孭ython 鈥楥鈥?API浠呬粎鎻愪緵浜嗘彁鍙栨湁絎﹀彿鏁存暟鐨勬柟寮忋傚鏋滄垜浠瘯鍥懼悜hello.greet浼犻掕礋鏁癇oost.Pyt hon鐗堝皢鎶涘嚭Python寮傚父錛岃孭ython 鈥楥鈥?API鐗堝垯浼氱戶緇儚鍦–++瀹炵幇涓偅鏍瘋漿鎹㈣礋鏁板埌鏃犵鍙鋒暟(閫氬父鍖呰鎴愭煇縐嶅緢澶х殑鏁?錛岀劧鍚?鎶婁笉姝g‘鐨勮漿鎹㈢粨鏋滀紶緇欒鍖呰鍑芥暟銆?
  • 榪欏紩璧蜂簡絎簩涓棶棰橈細濡傛灉鍑芥暟鐨勫弬鏁板ぇ浜?錛孋++ greet()琚皟鐢ㄦ椂浼氭姏鍑哄紓甯搞傚吀鍨嬬殑錛屽鏋淐++寮傚父璺ㄨ秺C緙栬瘧鍣ㄧ敓鎴愮殑浠g爜鐨?杈圭晫浼犻掞紝浼氬鑷村穿婧冦傛濡備綘鍦ㄧ涓涓増鏈腑鐪嬪埌鐨勶紝閭e効娌℃湁C++鑴氭墜鏋?scaffolding)鏉ラ槻姝㈠穿婧冨彂鐢熴傝Boost.Python鍖呰 榪囩殑鍑芥暟鑷姩鍖呭惈浜嗗紓甯稿鐞嗗眰錛屽畠鎶婃湭澶勭悊鐨凜++寮傚父緲昏瘧鎴愮浉搴旂殑Python寮傚父錛屼粠鑰屼繚鎶や簡Python鐢ㄦ埛銆?
  • 涓涓洿寰鐨勯檺鍒舵槸錛孭ython 鈥楥鈥?API鐨勫弬鏁拌漿鎹㈡満鍒跺彧鑳戒互涓縐嶆柟寮忓彇寰楁暣鏁皒銆傚鏋滀竴涓狿ython long 瀵硅薄(浠繪剰綺懼害鏁存暟) 紕板閥鍙互杞崲鎴?fit in)unsigned int鑰屼笉鑳借漿鎹㈡垚signed long錛孭yArg_ParseTuple涓嶈兘瀵瑰叾榪涜杞崲銆傚悓鏍峰鏋滆鍖呰鐨凜++ 綾誨寘鍚敤鎴峰畾涔夌殑闅愬紡operator unsigned int()杞崲錛屽畠姘歌繙涓嶈兘澶勭悊銆侭oost.Python鐨勫姩鎬佺被鍨嬭漿鎹㈡敞鍐岃〃鍏佽鐢ㄦ埛浠繪剰娣誨姞 杞崲鏂規硶銆?

搴撴瑙?/a>

榪欓儴鍒嗙畝瑕佹弿榪頒簡搴撶殑涓昏鐗規с備負浜嗛伩鍏嶆販娣嗭紝蹇界暐浜嗗疄鐜扮粏鑺傘?/p>

鏆撮湶綾?Exposing Classes)

C++綾誨拰緇撴瀯浠ョ被浼肩殑綆媧佺殑鎺ュ彛鏉ユ毚闇層傚亣璁炬湁:

struct World
{
    void set(std::string msg) { this->msg = msg; }
    std::string greet() { return msg; }
    std::string msg;
};

涓嬮潰鐨勪唬鐮佸皢鍦ㄦ垜浠殑鎵╁睍妯″潡閲屾毚闇插畠:

#include <boost/python.hpp>

BOOST_PYTHON_MODULE(hello)
{
    class_<World>("World")
        .def("greet"錛?amp;World::greet)
        .def("set"錛?amp;World::set)
    ;
}

灝界涓婅堪浠g爜鏈夋煇縐嶇啛鎮夌殑Pythonic鐨勬劅瑙夛紝浣嗚娉曟湁鏃惰繕鏄湁鐐逛護浜鴻糠鎯戯紝鍥犱負瀹冪湅璧鋒潵涓嶅儚浜轟滑涔犳儻鐨凜++浠g爜銆備絾鏄紝榪欎粛鐒跺彧鏄爣鍑咰++銆傚洜涓哄畠浠伒媧葷殑璇硶鍜屾搷浣滅閲嶈澆錛孋++鍜孭ython閮藉緢閫備簬瀹氫箟鐗瑰畾棰嗗煙(瀛?璇█( domain-specific (sub)languages) (DSLs)銆傞偅灝辨槸鎴戜滑鍦˙oost.Python閲屾墍鍋氱殑銆傛妸浠g爜鎷嗗紑鏉ョ湅:

class_<World>("World")

鏋勯犵被鍨媍lass_<World>鐨勬湭鍛藉悕瀵硅薄錛屾妸"World"浼犵粰瀹冪殑鏋勯犲櫒銆傝繖灝嗗湪鎵╁睍妯″潡閲屽垱寤轟竴涓彨World鐨刵ew-style Python綾伙紝騫舵妸瀹冨拰C++綾誨瀷World鍦˙oost.Python鐨勭被鍨嬭漿鎹㈡敞鍐岃〃閲屽叧鑱旇搗鏉ャ傛垜浠篃鍙互榪欎箞鍐?

class_<World> w("World");

浣嗛偅鏍峰仛鐨勮瘽浼氭洿綣佺悙錛屽洜涓烘垜浠笉寰椾笉鍐嶆鍛藉悕w浠ヨ皟鐢ㄥ畠鐨刣ef()鎴愬憳鍑芥暟:

w.def("greet"錛?amp;World::greet)

鍘熸潵鐨勪緥瀛愰噷琛ㄧず鎴愬憳榪涘叆鐨勭偣鐨勪綅緗病鏈変粈涔堢壒鍒殑錛欳++鍏佽浠繪剰鐨勭┖鐧界鍑虹幇鍦ㄨ〃鎰忕鍙?token)鐨勪換涓杈癸紝鎶婄偣鏀懼湪姣忚鐨勫紑濮嬪厑璁哥敤緇熶竴鐨勮娉曟妸榪炵畫鐨勮皟鐢ㄩ兘涓茶搗鏉ワ紝涓嶇鎴戜滑鎯充覆澶氬皯閮借銆傚彟涓涓厑璁哥殑涓叉帴鐨勪簨瀹炴槸class_<>鎴愬憳鍑芥暟閮借繑鍥炲*this鐨勫紩鐢ㄣ?/p>

鍥犳鍘熸潵鐨勪緥瀛愮瓑鍚屼簬:

class_<World> w("World");
w.def("greet"錛?amp;World::greet);
w.def("set"錛?amp;World::set);

鑳借繖鏍鋒媶鍒咮oost.Python綾誨寘瑁呭眰鐨勭粍鎴愰儴鍒嗘湁鏃跺欐槸鏈夌敤鐨勶紝浣嗘湰鏂囩殑鍓╀笅閮ㄥ垎灝嗕竴鐩翠嬌鐢ㄧ畝媧佺殑璇硶銆?/p>

鏈鍚庢潵鐪嬪寘瑁呯被琚嬌鐢ㄧ殑鎯呭喌:

>>> import hello
>>> planet = hello.World()
>>> planet.set('howdy')
>>> planet.greet()
'howdy'

鏋勯犲櫒(Constructors)

鍥犱負鎴戜滑鐨刉orld綾誨彧鏄竴涓畝鍗曠殑struct錛屽畠鏈変竴涓殣寮忕殑鏃犲弬鏁?no-argument)(nullary)鏋勯犲櫒銆侭oost.Python榛樿鏆撮湶nullary鏋勯犲櫒錛岃繖灝辨槸鎴戜滑鍙互鍍忎笅闈㈣繖鏍峰啓鐨勫師鍥?

>>> planet = hello.World()

鐒惰屼笉綆″摢闂ㄨ璦錛岃璁″緱濂界殑綾誨彲鑳介兘闇瑕佹瀯閫犲櫒鍙傛暟錛屼互寤虹珛浠栦滑鐨勪笉鍙橀噺(invariants)銆傚湪Python閲岋紝__init__鍙槸涓涓壒孌婂悕縐扮殑鎴愬憳鍑芥暟(method)錛屼笌榪欎笉鍚岋紝C++閲岀殑鏋勯犲櫒涓嶈兘鍍忔櫘閫氭垚鍛樺嚱鏁伴偅鏍峰鐞嗐傜壒鍒槸鎴戜滑涓嶈兘鍙栧畠鐨勫湴鍧: &World::World榪欐牱浼氳鎶ラ敊銆傚簱鎻愪緵浜嗕竴涓笉鍚岀殑鎺ュ彛鏉ユ寚瀹氭瀯閫犲櫒銆傚亣璁炬湁:

struct World
{
    World(std::string msg); // 娣誨姞鐨勬瀯閫犲櫒
    ...

鎴戜滑鍙互榪欐牱淇敼鍖呰浠g爜:

class_<World>("World"錛宨nit<std::string>())
    .def(init<double錛宒ouble>())
    ...

褰撶劧錛孋++綾誨彲鑳借繕鏈夊叾浠栫殑鏋勯犲櫒錛屾垜浠篃鍙互鏆撮湶浠栦滑錛屽彧闇瑕佸悜def()浼犻掓洿澶歩nit<鈥?gt;鐨勫疄渚?

class <World>("World"錛宨nit<std::string>())
        .def(init<double錛宒ouble>())
        ...

Boost.Python鍏佽琚寘瑁呯殑鍑芥暟錛屾垚鍛樺嚱鏁頒互鍙婃瀯閫犲櫒琚噸杞斤紝浠ユ槧灝凜++閲嶈澆銆?/p>

鏁版嵁鎴愬憳鍜屽睘鎬?Properties)

C++涓殑浠諱綍鍙叕鍏辯殑璁塊棶鐨勬暟鎹垚鍛橀兘鑳借交鏄撶殑琚寘瑁呮垚鍙鎴栬呭彧鍐欏睘鎬?attributes):

class_<World>("World"錛宨nit<std::string>())
    .def_readonly("msg"錛?amp;World::msg)
    ...

騫剁洿鎺ュ湪Python閲屼嬌鐢?

>>> planet = hello.World('howdy')
>>> planet.msg
'howdy'

榪欎笉浼氬鑷存坊鍔犲睘鎬у埌World瀹炰緥__dict__錛屼粠鑰屽湪鍖呰澶у瀷鏁版嵁緇撴瀯鏃惰妭鐪佸ぇ閲忕殑鍐呭瓨銆傚疄闄呬笂錛岄櫎闈炰粠Python鏄懼紡娣誨姞灞炴э紝鍚﹀垯瀹炰緥__dict__鏍規湰涓嶄細琚垱寤恒侾ython鐨勮繖縐嶈兘鍔涙潵婧愪簬鏂扮殑Python 2.2 綾誨瀷緋葷粺錛屽挨鍏舵槸descriptor鎺ュ彛鍜宲roperty綾誨瀷銆?/p>

鍦–++閲岋紝鍙叕鍏辯殑璁塊棶鐨勬暟鎹垚鍛樿璁や負鏄碂緋曡璁$殑琛ㄧ幇錛屽洜涓轟粬浠牬鍧忎簡灝佽(encapsulation)錛屾枃浣撳悜瀵?style guides)閫氬父鎸囩ず浠d箣浠?getter" 鍜?"setter"鍑芥暟銆傜劧鑰屽湪Python閲岋紝__getattr__錛宊_setattr__鍜屼粠2.2寮濮嬫湁鐨刾roperty鎰忓懗鐫灞炴ц繘鍏ュ彧鏄▼搴忓憳鎺у埗涓嬬殑灝佽寰楁洿濂界殑璇硶宸ュ叿銆傞氳繃璁㏄ython property瀵圭敤鎴風洿鎺ュ彲鐢紝Boost.Python榪炴帴浜嗕簩鑰呯殑涓嶅悓鎯敤璇傚鏋渕sg鏄鏈夌殑錛屾垜浠粛鐒惰兘鎶婂畠鏆撮湶涓篜ython閲岀殑灞炴?

class_<World>("World"錛宨nit<std::string>())
    .add_property("msg"錛?amp;World::greet錛?amp;World::set)
    ...

涓婇潰鐨勪緥瀛愭槧灝勪簡浜轟滑鐔熸倝鐨凱ython 2.2+閲岀殑property鐢ㄦ硶:

>>> class World(object):
...     __init__(self錛宮sg):
...         self.__msg = msg
...     def greet(self):
...         return self.__msg
...     def set(self錛宮sg):
...         self.__msg = msg
...     msg = property(greet錛宻et)

鎿嶄綔絎﹂噸杞?/a>

鑳界粰鐢ㄦ埛瀹氫箟綾誨瀷瀹氫箟綆楁湳鎿嶄綔絎︿竴鐩存槸涓ら棬璇█鐨勬暟鍊艱綆楀彇寰楁垚鍔熶竴涓噸瑕佸洜绱犮傚儚 Numpy 榪欐牱鐨勮蔣浠跺寘鐨勬垚鍔熻瘉鏄庝簡鍦ㄦ墿灞曟ā鍧椾腑鏆撮湶鎿嶄綔絎﹁兘浜х敓宸ㄥぇ鑳介噺銆侭oost.Python緇欏寘瑁呮搷浣滅閲嶈澆鎻愪緵浜嗙畝媧佺殑鏈哄埗銆備笅闈㈡槸鍖呰Boost鐨勬湁鐞嗘暟搴? rational number library)鐨勪唬鐮佺殑鐗囨柇:

class_<rational<int> >("rational_int")
  .def(init<int錛宨nt>()) // constructor錛宔.g. rational_int(3錛?)
  .def("numerator"錛?amp;rational<int>::numerator)
  .def("denominator"錛?amp;rational<int>::denominator)
  .def(-self)        // __neg__ (unary minus)
  .def(self + self)  // __add__ (homogeneous)
  .def(self * self)  // __mul__
  .def(self + int()) // __add__ (heterogenous)
  .def(int() + self) // __radd__

榪欑欖旀硶鏄氳繃綆鍗曠殑搴旂敤"琛ㄨ揪寮忔ā鏉?("expression templates") [VELD1995] 鏉ユ柦鍔犵殑錛?琛ㄨ揪寮忔ā鏉?鏄竴縐嶆渶鍒濅負浼樺寲楂樻ц兘鐭╅樀浠f暟琛ㄨ揪寮忚屽紑鍙戠殑鎶鏈傛湰璐ㄦ槸涓嶇珛鍗寵繘琛岃綆楋紝鑰岄噸杞芥搷浣滅鏉ユ瀯閫犳弿榪拌綆楃殑綾誨瀷銆傚湪鐭╅樀浠f暟閲岋紝褰撹冭檻鏁翠釜琛ㄨ揪寮忕殑緇撴瀯錛岃屼笉鏄?璐┆鐨?瀵規瘡姝ユ搷浣滄眰鍊兼椂錛岀粡甯稿彲浠ヨ幏寰楁垙鍓фх殑浼樺寲銆侭oost.Python鐢ㄥ悓鏍風殑鎶鏈潵鏋勫緩鍩轟簬鍖呭惈 self 鐨勮〃杈懼紡鐨勯傚綋鐨凱ython 鎴愬憳鍑芥暟瀵硅薄(method object)銆?/p>

緇ф壙

瑕佸湪Boost.Python閲屾弿榪癈++緇ф壙鍏崇郴錛屽彲浠ュ儚涓嬮潰榪欐牱鎶婂彲閫夌殑bases<鈥?gt;鍙傛暟娣誨姞鍒癱lass_<鈥?gt;妯℃澘鍙傛暟琛ㄩ噷:

class_<Derived錛宐ases<Base1錛孊ase2> >("Derived")
     ...

榪欐牱鏈変袱涓晥鏋滐細

  1. 褰揷lass_<鈥?gt;琚垱寤烘椂錛屽湪Boost.Python鐨勬敞鍐岃〃閲屾煡鎵懼搴斾簬Base1鍜孊ase2鐨凱ython綾誨瀷瀵硅薄錛岀劧鍚庝綔涓烘柊鐨凱ython琛嶇敓綾?鍨嬪璞$殑鍩虹被銆傚洜鑰屾毚闇茬粰Base1鍜孊ase2鐨勬垚鍛樺嚱鏁拌嚜鍔ㄦ垚涓轟簡琛嶇敓綾誨瀷鐨勬垚鍛樸傚洜涓烘敞鍐岃〃鏄叏灞鐨勶紝鍗充嬌鏆撮湶琛嶇敓綾誨瀷鐨勬ā 鍧楀拰瀹冪殑浠諱竴鍩虹被鐨勬ā鍧椾笉鍚岋紝緇ф壙鍚屾牱鏈夋晥銆?
  2. 琛嶇敓綾誨埌鍩虹被鐨凜++杞崲琚坊鍔犲埌Boost.Python娉ㄥ唽琛ㄣ傚洜姝ゆ湡寰呬換涓鍩虹被瀵硅薄(鐨勬寚閽堟垨寮曠敤)鐨勮鍖呰C++鎴愬憳鍑芥暟鍙互琚寘瑁?浜嗕換涓鍩虹被鐨勮鐢熷疄渚嬬殑瀵硅薄璋冪敤銆傜被T鐨勮鍖呰鎴愬憳鍑芥暟琚涓哄叿鏈夐殣寮忕殑絎竴涓弬鏁癟&錛岄偅涔堜負浜嗚琛嶇敓瀵硅薄鑳借皟鐢ㄥ熀綾繪垚 鍛樺嚱鏁幫紝榪欎簺杞崲鏄繀闇鐨勩?

褰撶劧浠庤鍖呰鐨凜++綾誨疄渚嬭鐢熸柊鐨凱ython綾繪槸鍙兘鐨勩傝繖鏄洜涓築oost.Python浣跨敤浜唍ew-style class緋葷粺錛岃繖濂楃郴緇熷湪Python鍐呯疆綾誨瀷涓婂伐浣滆壇濂姐備絾鏈変竴涓噸瑕佺粏鑺備笉鍚岋細 Python鍐呯疆綾誨瀷涓鑸湪__new__鍑芥暟閲屽緩绔嬩笉鍙橀噺(invariants)錛屼粠鑰岃鐢熺被涓嶇敤鍦ㄨ皟鐢ㄥ畠鐨勬垚鍛樺嚱鏁板墠璋冪敤鍩虹被鐨刜_init__:

>>> class L(list):
...      def __init__(self):
...          pass
...
>>> L().reverse()
>>>

鍥犱負C++瀵硅薄鏋勯犳槸涓姝ユ搷浣?one-step operation)錛岀洿鍒板弬鏁板彲鐢–++瀹炰緥鏁版嵁鎵嶈兘琚瀯閫狅紝鍦╛_init__鍑芥暟閲?

>>> class D(SomeBoostPythonClass):
...      def __init__(self):
...          pass
...
>>> D().some_boost_python_method()
Traceback (most recent call last):
  File "<stdin>"錛宭ine 1錛宨n ?
TypeError: bad argument type for built-in operation

鍙戠敓閿欒鐨勫師鍥犳槸Boost.Python 鍦ㄥ疄渚婦閲屾壘涓嶅埌綾誨瀷SomeBoostPythonClass鐨勫疄渚嬫暟鎹紱D鐨刜_init__鍑芥暟閬洊浜嗗熀綾葷殑鏋勯犲嚱鏁般傚彲浠ラ氳繃鍒犻櫎D鐨刜_init__鍑芥暟鎴栨槸璁╁畠鏄懼紡鐨勮皟鐢⊿omeBoostPythonClass.__init__(鈥?鏉ョ籂姝i敊璇?/p>

铏氬嚱鏁?/a>

鍦≒ython閲屼粠鎵╁睍綾昏鐢熸柊鐨勭被鍨嬫病澶ぇ鎰忔濓紝闄ら潪瀹冧滑鍦–++閲岃兘琚鎬佺殑浣跨敤銆傛崲鍙ヨ瘽璇達紝褰撳湪C++閲岄氳繃鍩虹被鎸囬拡/寮曠敤璋冪敤Python鎴愬憳鍑芥暟鏃訛紝Python鎴愬憳鍑芥暟鐨勫疄鐜板簲璇ョ湅璧鋒潵鍍忔槸瑕嗙洊(override)浜咰++铏氬嚱鏁扮殑瀹炵幇銆傚洜涓鴻鏀瑰彉铏氬嚱鏁扮殑琛屼負鐨勫敮涓鏂規硶鏄湪琛嶇敓綾婚噷瑕嗙洊(override)瀹冿紝鐢ㄦ埛蹇呴』鏋勯犱竴涓壒孌婄殑琛嶇敓綾繪潵鍒嗘淳(dispatch)澶氭佺被鐨勮櫄鍑芥暟銆?

//
// 瑕佸寘瑁呯殑鎺ュ彛:
//
class Base
{
 public:
    virtual int f(std::string x) { return 42; }
    virtual ~Base();
};

int calls_f(Base const& b錛宻td::string x) { return b.f(x); }

//
// 鍖呰浠g爜
//

// 鍒嗘淳鑰呯被(Dispatcher class)
struct BaseWrap : Base
{
    // 鍌ㄥ瓨鎸囧悜Python瀵硅薄鐨勬寚閽?
    BaseWrap(PyObject* self_) : self(self_) {}
    PyObject* self;

    // 褰揻娌℃湁琚鐩?override)鏃剁殑緙虹渷瀹炵幇
    int f_default(std::string x) { return this->Base::f(x); }
    // 鍒嗘淳瀹炵幇
    int f(std::string x) { return call_method<int>(self錛?f"錛寈); }
};

...
    def("calls_f"錛宑alls_f);
    class_<Base錛孊aseWrap>("Base")
        .def("f"錛?amp;Base::f錛?amp;BaseWrap::f_default)
        ;

涓嬮潰鏄竴浜沺ython婕旂ず浠g爜:

>>> class Derived(Base):
...     def f(self錛宻):
...          return len(s)
...
>>> calls_f(Base()錛?foo')
42
>>> calls_f(Derived()錛?forty-two')
9

瀵瑰垎媧捐呯被(Dispatcher class)錛岃娉ㄦ剰:

鏇存繁灞傛鐨勫弽灝勫嵆灝嗗嚭鐜?Deeper Reflection on the Horizon)?

鏃犲彲鍚﹁錛岄噸澶嶈繖縐嶅叕寮忓寲鐨勬祦紼嬫槸鍐楅暱涔忓懗鐨勩傚挨鍏舵槸欏圭洰閲屾湁澶ч噺澶氭佺被鐨勬椂鍊欍傝繖鍙嶆槧浜咰++緙栬瘧鏃跺唴鐪佽兘鍔涚殑蹇呯劧闄愬埗:鏃犳硶鏋氫婦綾葷殑鎴愬憳鏉ュ垽鏂摢涓槸铏氬嚱鏁般備笉榪囷紝涓涓緢鏈夊笇鏈涚殑欏圭洰宸茬粡鍚姩錛岃嚧鍔涗簬鍐欎竴涓墠绔▼搴忔潵浠嶤++澶存枃浠惰嚜鍔ㄧ敓鎴愯繖浜涘垎媧捐呯被(浠ュ強鍏跺畠鍖呰浠g爜)銆?/p>

Pyste 鏄敱Bruno da Silva de Oliveira寮鍙戠殑錛屽熀浜?GCC_XML 鏋勫緩銆侴CC_XML鍙互鐢熸垚XML鐗堟湰鐨凣CC鍐呴儴紼嬪簭鎻忚堪銆侴CC鏄竴縐嶉珮搴︾鍚?璇戞敞錛欳++鏍囧噯)鐨勭紪璇戝櫒錛屼粠鑰岀‘淇濅簡瀵規渶澶嶆潅鐨勬ā鏉夸唬鐮佺殑姝g‘澶勭悊鍜屽搴曞眰綾誨瀷緋葷粺鐨勫畬鍏ㄨ闂傚拰Boost.Python鐨勫摬瀛︿竴鑷達紝Pyste鎺ュ彛鎻忚堪鏃笉渚靛叆琚寘瑁呯殑浠g爜錛屼篃涓嶇敤鏌愮涓嶇啛鎮夌殑璇█鏉ヨ〃杈撅紝鐩稿弽錛氬畠鏄?00%鐨勭函Python鑴氭湰銆傚鏋淧yste鎴愬姛鐨勮瘽錛屽皢鏍囧織鐫鎴戜滑鐨勫緢澶氱敤鎴蜂笉鐢ㄥ啀浠涔堥兘鐩存帴鐢–++鍖呰銆傚畠灝嗗厑璁告垜浠夋嫨鎶婁竴浜涘厓紼嬪簭(metaprogram)浠g爜浠嶤++縐誨姩鍒癙ython銆傛垜浠湡寰呬笉涔呭悗涓嶄粎鐢ㄦ埛錛孊oost.Python寮鍙戣呰嚜宸變篃鑳戒互娣峰悎鐨勬濊礬鏉ヨ冭檻("thinking hybrid")浠栦滑鑷繁鐨勪唬鐮併?/p>

搴忓垪鍖?Serialization)

搴忓垪鍖栨槸鎶婂唴瀛樹腑鐨勫璞¤漿鎹㈡垚鍙互淇濆瓨鍒扮鐩樹笂鎴栭氳繃緗戠粶浼犻佺殑鏍煎紡鐨勮繃紼嬨傚簭鍒楀寲鍚庣殑瀵硅薄(鏈甯歌鐨勬槸綆鍗曞瓧絎︿覆)鍙互琚噸鏂板彇寰楀茍杞崲鍥炲師鏉ョ殑瀵硅薄銆傚ソ鐨勫簭鍒楀寲緋葷粺鑳藉鑷姩杞崲鏁翠釜瀵硅薄灞傛(object hierarchies)銆侾ython鐨勬爣鍑唒ickle妯″潡姝f槸榪欐牱鐨勭郴緇熴傚畠鍒╃敤璇█寮哄ぇ鐨勮繍琛屾椂鍐呯渷鏉ュ簭鍒楀寲鍑犱箮鏄換鎰忕殑鐢ㄦ埛瀹氫箟瀵硅薄銆傚姞涓婁竴浜涚畝鍗曠殑闈炰鏡鍏ラ檺瀹氾紝榪欑寮哄ぇ鐨勮鏂藉彲浠ヨ鎵╁睍鎴愬琚寘瑁呯殑C++瀵硅薄涔熸湁鏁堛備笅闈㈡槸涓涓緥瀛?

#include <string>

struct World
{
    World(std::string a_msg) : msg(a_msg) {}
    std::string greet() const { return msg; }
    std::string msg;
};

#include <boost/python.hpp>
using namespace boost::python;

struct World_picklers : pickle_suite
{
  static tuple
  getinitargs(World const& w) { return make_tuple(w.greet()); }
};

BOOST_PYTHON_MODULE(hello)
{
    class_<World>("World"錛宨nit<std::string>())
        .def("greet"錛?amp;World::greet)
        .def_pickle(World_picklers())
    ;
}

鐜板湪璁╂垜浠垱寤轟竴涓猈orld瀵硅薄騫舵妸瀹冩斁鍒扮鐩樹笂:

>>> import hello
>>> import pickle
>>> a_world = hello.World("howdy")
>>> pickle.dump(a_world錛宱pen("my_world"錛?w"))

鍦ㄥ彲鑳戒笉鍚岀殑璁$畻鏈虹殑鍙兘涓嶅悓鐨勬搷浣滅郴緇熺殑鍙兘涓嶅悓鐨勮剼鏈腑:

>>> import pickle
>>> resurrected_world = pickle.load(open("my_world"錛?r"))
>>> resurrected_world.greet()
'howdy'

褰撶劧涔熷彲浠ョ敤cPickle鏉ヨ幏寰楁洿蹇殑澶勭悊閫熷害銆?/p>

Boost.Python鐨刾ickle_suite瀹屽叏鏀寔鏍囧噯Python鏂囨。瀹氫箟鐨刾ickle鍗忚銆傜被浼糚ython閲岀殑__getinitargs__鍑芥暟錛宲ickle_suite鐨刧etinitargs()璐熻矗鍒涘緩鍙傛暟tuple鏉ラ噸寤鴻pickle浜嗙殑瀵硅薄銆侾ython pickle鍗忚涓殑鍏朵粬鍏冪礌錛宊_getstate__ 鍜宊_setstate__鍙互閫氳繃C++ getstate鍜宻etstate鍑芥暟鏉ュ彲閫夌殑鎻愪緵銆侰++鐨勯潤鎬佺被鍨嬬郴緇熷厑璁稿簱鍦ㄧ紪璇戞椂紜繚娌℃湁鎰忎箟鐨勫嚱鏁扮粍鍚?渚嬪錛氭病鏈塻etstate 灝眊etstate)涓嶄細琚嬌鐢ㄣ?/p>

瑕佹兂搴忓垪鍖栨洿澶嶆潅鐨凜++瀵硅薄闇瑕佸仛姣斾笂闈㈢殑渚嬪瓙紼嶅井澶氱偣鐨勫伐浣溿傚垢榪愮殑鏄疧bject鎺ュ彛(鍙傝涓嬩竴鑺?鍦ㄤ繚鎸佷唬鐮佷究浜庣鐞嗕笂甯簡澶у繖銆?/p>

瀵硅薄鎺ュ彛(Object interface)

鏃犳墍涓嶅湪鐨凱yObject*錛屾墜鍔ㄥ紩鐢ㄨ鏁幫紝闇瑕佽浣忔槸鍝釜API璋冪敤榪斿洖浜?鏂扮殑"(鑷韓鎷ユ湁鐨?寮曠敤鎴栨槸"鍊熸潵鐨?(鍘熷鐨?寮曠敤錛岃繖浜涘彲鑳芥湁緇忛獙鐨凜璇█鎵╁睍妯″潡鐨勪綔鑰呴兘鐔熸倝銆傝繖浜涚害鏉熶笉浠呴夯鐑︼紝鏇存槸閿欒鐨勪富瑕佹潵婧愶紝灝ゅ叾鏄瓨鍦ㄥ紓甯哥殑鏃跺欍?/p>

Boost.Python鎻愪緵浜嗕竴涓猳bject綾伙紝瀹冭嚜鍔ㄥ寲浜嗗紩鐢ㄨ鏁板茍鎻愪緵浠繪剰綾誨瀷鐨凜++瀵硅薄鍒癙ython鐨勮漿鎹€傝繖鏋佸ぇ鐨勫噺杞諱簡鏈潵鐨勬墿灞曟ā鍧椾綔鑰呯殑瀛︿範璐熸媴銆?/p>

浠庝換涓綾誨瀷鍒涘緩object鏋佸害綆鍗?

object s("hello錛寃orld");   // s 綆$悊涓涓狿ython瀛楃涓?

object鍙互鍜屾墍鏈夊叾瀹冪被鍨嬭繘琛屾ā鏉垮寲鐨勪氦浜掞紝鑷姩鐨勮繘琛屽埌Python鐨勮漿鎹€傝繖涓鍒囪嚜鐒跺緱寰堝鏄撹蹇界暐涓嶈:

object ten_Os = 10 * s[4]; // -> "oooooooooo"

涓婇潰鐨勪緥瀛愪腑錛屽湪绱㈠紩鍜屼箻娉曟搷浣滆璋冪敤鍓嶏紝4鍜?0琚漿鎹㈡垚浜哖ython瀵硅薄銆?/p>

extract<T>綾繪ā鏉垮彲浠ョ敤鏉ユ妸Python瀵瑰璞¤漿鎹㈡垚C++綾誨瀷:

double x = extract<double>(o);

濡傛灉浠諱竴鏂瑰悜鐨勮漿鎹笉鑳芥墽琛岋紝灝嗗湪榪愯鏃舵姏鍑轟竴涓傚綋鐨勫紓甯搞?/p>

浼撮殢object綾誨瀷鐨勬槸涓濂楄鐢熺被鍨嬶紝灝藉彲鑳界殑鏄犲皠Python鐨勫唴緗被鍨?list錛宒ict錛宼uple絳?銆傝繖鏍峰氨鑳芥柟渚跨殑浠嶤++鎿嶄綔榪欎簺楂樼駭綾誨瀷浜?

dict d;
d["some"] = "thing";
d["lucky_number"] = 13;
list l = d.keys();

榪欑湅璧鋒潵鍜屽伐浣滆搗鏉ュ嚑涔庡氨鍍忔槸閫氬父鐨刾ython浠g爜錛屼絾瀹冨疄闄呬笂鏄函鐨凜++銆傚綋鐒舵垜浠兘鍖呰鎺ュ彈鎴栬繑鍥瀘bject瀹炰緥鐨勫嚱鏁般?/p>

浠庢販鍚堢殑鎬濊礬鎬濊?Thinking hybrid)

鍥犱負緇撳悎緙栫▼璇█鍏鋒湁瀹為檯鐨勫拰蹇冪悊鐨勫洶闅撅紝鍦ㄨ繘琛屼換浣曞疄闄呭紑鍙戝墠鍐沖畾浣跨敤鍗曚竴鐨勮璦鏄櫘閬嶇幇璞°傚寰堝搴旂敤鏉ヨ錛屾ц兘涓婄殑鑰冭檻鍐沖畾浜嗘牳蹇冪畻娉曡鐢ㄧ紪璇戣璦瀹炵幇銆備笉騫哥殑鏄紝鍥犱負闈欐佺被鍨嬬郴緇熺殑澶嶆潅鎬э紝鎴戜滑涓鴻繍琛屾椂鎬ц兘瑕佷粯鍑哄紑鍙戞椂闂村ぇ閲忓闀跨殑浠d環銆傜粡楠岃〃鏄庯紝鍜屽紑鍙戠浉搴旂殑Python浠g爜姣旇搗鏉ワ紝寮鍙戝彲緇存姢鐨凜++浠g爜閫氬父闇瑕佹洿闀跨殑鏃墮棿鍜岃壈闅懼緱澶氭墠鑳借幏寰楃殑宸ヤ綔緇忛獙銆傚嵆浣垮紑鍙戣呰寰楀彧鐢ㄤ竴闂ㄧ紪璇戣璦寮鍙戞尯濂斤紝涓轟簡鐢ㄦ埛錛屼粬浠篃緇忓父鐢ㄦ煇縐嶇被鍨嬬殑鐗瑰埆鐨勮剼鏈眰鏉ヨˉ鍏呯郴緇燂紝鍝曚粬浠案榪滀笉浼氬緱鍒板悓鏍風殑濂藉銆?/p>

Boost.Python璁╂垜浠兘 think hybrid 銆侾ython鍙互鐢ㄦ潵蹇熸惌寤烘柊鐨勫簲鐢ㄧ殑鍘熷瀷錛涘湪寮鍙戣兘宸ヤ綔鐨勭郴緇熸椂錛屽畠鐨勬槗鐢ㄦу拰澶ч噺鐨勬爣鍑嗗簱浣挎垜浠浜庨鍏堛傞渶瑕佺殑璇濓紝鍙互鐢ㄨ兘宸ヤ綔鐨勪唬鐮佹潵鎵懼嚭闄愬埗閫熷害鐨勭儹鐐?rate-limiting hotspots)銆備負浜嗘渶澶у寲鎬ц兘錛岃繖浜涚儹鐐瑰彲浠ョ敤C++鏉ラ噸鏂板疄鐜幫紝鐒跺悗鐢˙oost.Python緇戝畾鏉ヨ繛榪涘凡鏈夌殑楂樼駭榪囩▼(璇戞敞錛氭寚Python紼嬪簭)銆?/p>

褰撶劧錛屽鏋滀竴寮濮嬪氨娓呮寰堝綆楁硶鏈鍚庝笉寰椾笉鐢–++鏉ュ疄鐜幫紝榪欑 鐢遍《鑷充笅(top-down) 鐨勬柟娉曞氨娌¢偅涔堝惛寮曚漢浜嗐傚垢榪愮殑鏄紝Boost.Python涔熷厑璁告垜浠嬌鐢?鐢卞簳鑷充笂(bottom-up) 鐨勬柟娉曘傛垜浠潪甯告垚鍔熺殑鎶婅繖縐嶆柟娉曠敤鍦ㄤ簡涓涓敤浜庣瀛﹀簲鐢ㄧ殑宸ュ叿綆辮蔣浠剁殑寮鍙戜笂銆傝繖涓伐鍏風寮濮嬩富瑕佹槸涓涓甫Boost.Python緇戝畾鐨凜++綾誨簱錛屾帴涓嬫潵鏈変竴灝忔鏃墮棿澧為暱涓昏闆嗕腑鍦–++閮ㄥ垎錛岄殢鐫宸ュ叿綆卞彉寰楄秺鏉ヨ秺瀹屾暣錛岃秺鏉ヨ秺澶氭柊娣誨姞鐨勫姛鑳藉彲浠ョ敤Python鏉ュ疄鐜般?/p>

http://static.flickr.com/55/124987534_34375196e6.jpg?v=0

涓婂浘鏄疄鐜版柊鐨勭畻娉曟椂鏂版坊鍔犵殑C++浠g爜鍜孭ython浠g爜鐨勪及璁℃瘮鐜囬殢鏃墮棿鍙樺寲鐨勬儏鍐點傛垜浠璁¤繖涓瘮鐜囦細杈懼埌鎺ヨ繎70% (Python)銆傝兘澶熶富瑕佺敤Python鑰屼笉鏄洿鍥伴毦鐨勯潤鎬佺被鍨嬭璦鏉ヨВ鍐蟲柊闂錛岃繖鏄垜浠湪Boost.Python涓婄殑鎶曞叆鐨勫洖鎶ャ傛垜浠殑鎵鏈変唬鐮侀兘鑳戒粠Python璁塊棶錛岃繖浣垮緱鏇村箍娉涚殑寮鍙戣呭彲浠ョ敤瀹冩潵蹇熷紑鍙戞柊鐨勫簲鐢ㄣ?/p>

寮鍙戝巻鍙?/a>

Boost.Python鐨勭涓鐗堟槸鐢盌ave Abrahams鍦―ragon Systems寮鍙戠殑銆傚湪閭i噷浠栭潪甯歌崳騫哥殑璇峰埌Tim Peters浣滀負浠栫殑"Python涔嬬"( "The Zen of Python")瀵煎笀銆侱ave鐨勫伐浣滀箣涓鏄紑鍙戝熀浜嶱ython鐨勮嚜鐒惰璦澶勭悊緋葷粺銆傚洜涓烘渶緇堣琚敤浜庡祵鍏ュ紡紜歡錛岀郴緇熻綆楀瘑闆嗙殑鍐呮牳鎬繪槸琚亣璁炬垚瑕佺敤C++鏉ラ噸鍐欎互浼樺寲閫熷害鍜屽唴瀛橀渶姹傞噺(memory footprint) [1] 銆傝繖涓」鐩篃鎯崇敤Python嫻嬭瘯鑴氭湰 [2] 鏉ユ祴璇曟墍鏈夌殑C++浠g爜銆傚綋鏃舵垜浠煡閬撶殑緇戝畾C++鍜孭ython鐨勫敮涓宸ュ叿鏄?SWIG 錛屼絾閭f椂瀹冨鐞咰++鐨勮兘鍔涙瘮杈冨急銆傝璇村湪閭f椂灝卞Boost.Python鎵浣跨敤鏂規硶鐨勫彲鑳戒紭瓚婁箣澶勬湁浜嗕粈涔堟繁鍒繪礊瑙侊紝閭f槸楠椾漢鐨勩侱ave瀵硅姳淇忕殑C++妯℃澘鎶宸х殑鍏磋叮鍜屽ù鐔熷垰濂藉埌浜嗚兘鐪熸鍋氱偣浠涔堢殑鏃跺欙紝Boost.Python灝遍偅鏍峰嚭鐜頒簡錛屽洜涓哄畠婊¤凍浜嗛渶姹傦紝鍥犱負瀹冪湅璧鋒潵鎸洪叿錛屽煎緱涓璇曘?/p>

鏃╂湡鐨勭増鏈拡瀵圭殑璁稿鍩烘湰鐩爣鍜屽湪榪欑瘒璁烘枃涓弿榪扮殑鐩稿悓銆傛渶鏄捐憲鐨勫尯鍒湪浜庢棭鏈熺増鏈殑璇硶瑕佺◢寰夯鐑︿竴鐐癸紝緙轟箯瀵規搷浣滅閲嶈澆錛宲ickling錛屽熀浜庣粍浠剁殑寮鍙戠殑涓撻棬鏀寔銆傚悗闈笁涓壒鎬у緢蹇氨琚玌llrich Koethe鍜孯alf Grosse-Kunstleve [3] 鍔犱笂浜嗐傚叾浠栫儹蹇冪殑璐$尞鑰?contributors)涔熷嚭鏉ヨ礎鐚簡涓浜涙敼榪涳紝濡傚宓屽妯″潡鍜屾垚鍛樺嚱鏁扮殑鏀寔絳夈?/p>

鍒?001騫存棭鏈熸椂寮鍙戝凡緇忕ǔ瀹氫笅鏉ヤ簡錛屽緢灝戞湁鏂扮殑鐗規ф坊鍔狅紝鐒惰岃繖鏃朵竴涓儲浜虹殑闂鏆撮湶鍑烘潵浜嗭細Ralf宸茬粡寮濮嬪湪涓涓嬌鐢?EDG 鍓嶇鐨勭紪璇戝櫒鐨勯鍙戝竷鐗堜笂嫻嬭瘯Boost.Python錛岃繖鏃禕oost.Python鍐呮牳涓礋璐e鐞哖ython鍜孋++鐨勭被鍨嬭漿鎹㈢殑鏈哄埗(mechanism)緙栬瘧澶辮觸浜嗐傜粨鏋滆瘉鏄庢垜浠竴鐩村湪鍒╃敤涓涓猙ug錛岃繖涓猙ug鍦ㄦ墍鏈夋垜浠祴璇曡繃鐨凜++緙栬瘧鍣ㄥ疄鐜頒腑閮介潪甯告櫘閬嶃傛垜浠煡閬撻殢鐫C++緙栬瘧鍣ㄥ緢蹇彉寰楁洿鍔犳爣鍑嗗吋瀹癸紝搴撳皢寮濮嬪湪鏇村鐨勫鉤鍙頒笂澶辮觸銆傚緢涓嶅垢錛屽洜涓鴻繖濂楁満鍒舵槸搴撶殑鍔熻兘鐨勪腑鏋紝瑙e喅闂鐪嬭搗鏉ラ潪甯稿洶闅俱?/p>

騫歌繍鐨勬槸閭d竴騫寸殑鍚庢湡錛孡awrence Berkeley鍜屽悗鏉ョ殑Lawrence Livermore National labs鍜?Boost Consulting 絳捐浜嗘敮鎸丅oost.Python鐨勫紑鍙戠殑鍚堝悓銆傝繖鏍峰氨鏈変簡鏂扮殑鏈轟細鏉ュ鐞嗗簱鐨勫熀鏈棶棰橈紝浠庤岀‘淇濆皢鏉ョ殑鍙戝睍銆傞噸鏂拌璁″紑濮嬩簬浣庣駭綾誨瀷杞崲鏋舵瀯錛屽唴緗殑鏍囧噯鍏煎鍜屽鍩轟簬緇勪歡鐨勫紑鍙戠殑鏀寔(鍜屼笉寰椾笉鏄懼紡鐨勮法瓚婃ā鍧楄竟鐣屽鍏ユ垨瀵煎嚭杞崲鐨勭涓鐗堝艦鎴愬姣?銆傚Python鍜孋++瀵硅薄鐨勫叧緋昏繘琛屼簡鍒嗘瀽錛屼粠鑰岃兘鏇寸洿瑙傜殑澶勭悊C++ lvalues鍜宺values銆?/p>

Python 2.2閲屽嚭鐜扮殑寮哄ぇ鐨勬柊綾誨瀷緋葷粺浣垮緱閫夋嫨鏄惁緇存姢瀵筆ython 1.5.2鐨勫吋瀹規у彉寰楀鏄撲簡錛氳繖涓涪寮冨ぇ閲忕簿蹇冨埗浣滅殑浠呬粎鐢ㄦ潵妯℃嫙classic Python綾葷殑浠g爜鐨勬満浼氾紝濂界殑浠や漢鏃犳硶鎷掔粷銆傚彟澶栵紝Python iterators 鍜?descriptors鎻愪緵浜嗛噸瑕佷笖浼橀泤鐨勫伐鍏鋒潵鎻忚堪綾諱技鐨凜++緇撴瀯銆備竴鑸寲浜嗙殑瀵硅薄鎺ュ彛鐨勫紑鍙戝厑璁告垜浠繘涓姝ユ妸C++紼嬪簭鍛樺拰浣跨敤Python C API甯︽潵鐨勫嵄闄╂у拰璇硶璐熸媴闅旂寮銆傚ぇ閲忕殑鍏朵粬鐗規у湪榪欎釜闃舵琚姞浜嗚繘鏉ワ紝鍖呮嫭C++寮傚父緲昏瘧錛屾敼榪涚殑閲嶈澆鍑芥暟鏀寔錛岃繕鏈夋渶閲嶈鐨勭敤鏉ュ鐞嗘寚閽堝拰寮曠敤鐨凜allPolicies銆?/p>

浜?002騫村崄鏈堬紝絎簩鐗堢殑Boost.Python鍙戝竷浜嗐傞偅浠ュ悗鐨勫紑鍙戦泦涓湪鏀硅繘瀵笴++榪愯鏃跺鎬佸拰鏅鴻兘鎸囬拡鐨勬敮鎸佷笂銆傜壒鍒槸Peter Dimov鐨勫閥濡欑殑boost::shared_ptr璁捐浣挎垜浠兘緇欐販鍜岀郴緇熷紑鍙戣呮彁渚涗竴鑷寸殑鎺ュ彛錛岀敤浜庤法瓚婅璦钘╃鏉ュ洖縐誨姩瀵硅薄鑰屼笉涓㈠け淇℃伅銆?/p>

鍒氬紑濮嬶紝鎴戜滑鎷呭績Boost.Python v2鐨勫鏉傛т細闃葷璐$尞鑰咃紝浣?Pyste 鍜屽嚑涓叾浠栭噸瑕佺壒鎬х殑璐$尞(contribution)鐨勫嚭鐜頒嬌榪欎簺鎷呭績鏄懼緱澶氫綑浜嗐傛瘡澶╁嚭鐜板湪Python C++-sig涓婄殑闂鍜屽笇鏈涘緱鍒扮殑鏀硅繘鐨勭Н鍘?backlog)琛ㄦ槑浜嗗簱姝e湪琚嬌鐢ㄣ傚鎴戜滑鏉ヨ錛屾湭鏉ョ湅璧鋒潵寰堝厜鏄庛?/p>

緇撹

Boost.Python 瀹炵幇浜嗕袱縐嶅姛鑳戒赴瀵岀殑浼樼鐨勮璦鐜闂寸殑鏃犵紳鍗忎綔銆傚洜涓哄畠鍒╃敤妯℃澘鍏冪紪紼嬫妧鏈潵瀵圭被鍨嬪拰鍑芥暟榪涜鍐呯渷錛岀敤鎴鋒案榪滅敤涓嶇潃鍐嶅絎笁縐嶈璦:鎺ュ彛瀹氫箟鏄敤綆媧佽屽彲緇存姢鐨凜++鍐欑殑銆傚悓鏍鳳紝鍖呰緋葷粺涓嶇敤鍐嶈В鏋怌++澶存枃浠舵垨鏄弿榪扮被鍨嬬郴緇燂細緙栬瘧鍣ㄩ兘緇欐垜浠仛浜嗐?/p>

璁$畻瀵嗛泦鐨勪換鍔¢傚悎寮哄ぇ鐨凜++錛屽畠涓鑸笉鍙兘鐢ㄧ函Python鏉ュ疄鐜般傜劧鑰屽儚搴忓垪鍖栬繖鏍風殑宸ヤ綔錛屽彲鑳界敤Python寰堢畝鍗曪紝鐢–++灝遍潪甯稿洶闅俱傚亣濡傛湁浠庡簳灞傚紑濮嬫瀯寤烘販鍚堢郴緇熺殑濂緢錛屾垜浠湁鏂扮殑淇″績鍜屽姩鍔涙潵榪涜璁捐銆?/p>



Squirrel 2006-05-15 15:44 鍙戣〃璇勮
]]>
Pythonwin VS Eclipse PyDevhttp://www.shnenglu.com/Squirrel/archive/2006/05/15/7187.htmlSquirrelSquirrelMon, 15 May 2006 07:17:00 GMThttp://www.shnenglu.com/Squirrel/archive/2006/05/15/7187.htmlhttp://www.shnenglu.com/Squirrel/comments/7187.htmlhttp://www.shnenglu.com/Squirrel/archive/2006/05/15/7187.html#Feedback2http://www.shnenglu.com/Squirrel/comments/commentRss/7187.htmlhttp://www.shnenglu.com/Squirrel/services/trackbacks/7187.html聽聽聽鍚屾牱浣滀負IDE錛孭ythonwin 姣?IDLE 鏈変笉灝戜護浜哄叴濂嬬殑鍦版柟錛屾垜寮濮嬩嬌鐢≒ythonwin涔熸鏄敱浜庡畠鐨凞EBUG鐜鍜屽埆浜虹殑鎺ㄨ崘銆傚彲褰撴垜璋冭瘯鏃訛紝姣斿錛屼竴涓▼搴忔寜涓ゆF5錛屽氨鍑虹幇鈥淧ythonwin.exe 閬囧埌闂闇瑕佸叧闂濓紝鎺ョ潃灝辨槸Runtime Error鍜屽唴瀛樹笉鑳戒負璇匯傜劧鍚庡繀欏婚噸鍚疨ythonwin鎵嶈兘鐢紒閬囧埌榪欐牱鐨勯棶棰橈紝鎭愭曞ぇ澶氱敤鎴風殑蹇冪悊閮介毦浠ユ壙鍙椼?br />聽聽聽鎴戝悗鏉ユ兂璧蜂簡Eclipse+CDT錛岄偅涔堟湁Eclipse+PDT涔堬紵鏋滅劧錛岀湅鍒扮綉涓婃湁Eclipse+PyDev銆?br />聽聽聽鍦‥clipse涓夋嫨鑿滃崟錛?/font>Help鈥擲oftware Updates鈥擣ind And Install 錛岄夋嫨 Search for new features to intall錛岀偣 New Remote Site 鎸夐挳錛岃緭鍏?http://pydev.sf.net/updates錛?/font>涓嬭澆騫跺畨瑁呫?br />聽聽聽閰嶇疆鏃墮渶瑕佸埗瀹歅ython瑙i噴鍣紝閫夋嫨姝g‘鐨勮礬寰勫嵆鍙?br />聽聽聽鐒跺悗灝卞彲浠ュ湪Eclipse涓嬪紑鍙戣皟璇昉ython紼嬪簭浜嗐?br />pyDev.JPG
聽聽聽
聽聽聽鎴戜篃涓嬭繃BOA錛屼絾鎰熻鐜板湪瀹冭繕鏈変笉灝戠己闄鳳紝姣曠珶鎵嶆槸alpha鐗堛備及璁$瓑鍒?.0鍑烘潵灝卞緢媯掍簡銆?br />聽聽聽WingIDE 涓嶇煡閬撴庝箞鏍鳳紝涓嬫灝濊瘯鍚с?/font>


Squirrel 2006-05-15 15:17 鍙戣〃璇勮
]]>
May it behttp://www.shnenglu.com/Squirrel/archive/2005/11/28/1351.htmlSquirrelSquirrelMon, 28 Nov 2005 00:46:00 GMThttp://www.shnenglu.com/Squirrel/archive/2005/11/28/1351.htmlhttp://www.shnenglu.com/Squirrel/comments/1351.htmlhttp://www.shnenglu.com/Squirrel/archive/2005/11/28/1351.html#Feedback0http://www.shnenglu.com/Squirrel/comments/commentRss/1351.htmlhttp://www.shnenglu.com/Squirrel/services/trackbacks/1351.htmlShines down upon you
May it be when darkness falls
Your heart will be true
You walk a lonely road
Oh! How far you are from home

Morni? ut簍虜li? (Quenya: Darkness has come)
Believe and you will find your way
Morni? alanti? (Quenya: Darkness has fallen)
A promise lives within you now

May it be the shadow's call
Will fly away
May it be your journey on
To light the day
When the night is overcome
You may rise to find the sun

Morni? ut簍虜li? (Quenya: Darkness has come)
Believe and you will find your way

Morni? alanti? (Quenya: Darkness has fallen)
A promise lives within you now

A promise lives within you now

Squirrel 2005-11-28 08:46 鍙戣〃璇勮
]]>
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              欧美激情久久久| 一本色道久久综合亚洲精品高清| 亚洲自拍电影| 在线亚洲免费视频| 国产精品v欧美精品v日韩| 中日韩视频在线观看| 一区二区日韩伦理片| 国产精品一区二区你懂的| 欧美中文在线免费| 久久免费的精品国产v∧| 亚洲国产一区在线| 最新日韩av| 欧美电影在线观看完整版| 日韩天堂在线观看| 亚洲一区久久| 亚洲国产精品久久久久久女王| 欧美日韩国产成人高清视频| 一本色道久久88综合日韩精品| 中文精品在线| 在线不卡亚洲| 亚洲视频在线观看免费| 极品尤物久久久av免费看| 亚洲精品韩国| 国产主播一区二区三区四区| 亚洲国产精品福利| 欧美午夜国产| 欧美福利在线观看| 国产精品久久午夜| 女人天堂亚洲aⅴ在线观看| 欧美日韩国产专区| 久久久视频精品| 欧美午夜宅男影院| 亚洲第一区在线观看| 国产精品国产三级国产专播品爱网| 久久久噜噜噜久噜久久| 欧美日韩国产一级| 欧美大片免费观看在线观看网站推荐| 欧美特黄一级大片| 亚洲大胆人体视频| 国产一区二区黄色| 亚洲社区在线观看| 一本久久综合| 久久综合激情| 久久综合狠狠综合久久综青草 | 一区二区三区欧美成人| 精品9999| 欧美中文字幕视频在线观看| 一区二区三区精品国产| 欧美另类一区二区三区| 久久久一本精品99久久精品66| 欧美日韩国产在线播放网站| 欧美激情第五页| 激情偷拍久久| 欧美亚洲系列| 久久精品一区| 国产日韩精品综合网站| 亚洲自拍高清| 午夜精品久久99蜜桃的功能介绍| 欧美另类亚洲| 日韩亚洲欧美成人一区| 99国产精品| 欧美日韩国产黄| 日韩亚洲综合在线| 亚洲天堂av图片| 欧美性一区二区| 一区二区三区四区在线| 亚洲欧美日本伦理| 国产麻豆日韩| 午夜在线播放视频欧美| 久久精品国产第一区二区三区| 国产精品久久久久三级| 亚洲在线视频一区| 久久国产精品黑丝| 伊人成人在线视频| 另类综合日韩欧美亚洲| 亚洲国产日韩美| 中文一区二区| 国产日产欧产精品推荐色| 亚洲免费在线观看| 欧美成人乱码一区二区三区| 亚洲电影在线看| 99国产精品久久久久久久| 欧美日韩 国产精品| 一区二区国产在线观看| 久久av资源网| 亚洲国产精品综合| 欧美特黄一级| 欧美影院成年免费版| 欧美国产在线观看| 亚洲午夜日本在线观看| 国内成人自拍视频| 欧美国产一区二区| 亚洲欧美网站| 亚洲电影在线观看| 亚洲欧洲av一区二区三区久久| 国产一区二区中文| 欧美国产亚洲精品久久久8v| 亚洲午夜日本在线观看| 久久亚洲影音av资源网| 一区二区电影免费在线观看| 国产精品国产三级国产aⅴ入口| 欧美一二三视频| 亚洲乱码视频| 久久中文字幕一区| 亚洲亚洲精品在线观看| 影音先锋久久精品| 国产精品igao视频网网址不卡日韩| 久久国产一区二区| 亚洲午夜一区二区三区| 欧美黑人多人双交| 久久激情久久| 亚洲自拍偷拍麻豆| 亚洲欧洲精品一区二区三区| 国产精品欧美一区喷水| 欧美精品福利视频| 久久久久久久精| 亚洲欧美视频在线观看| 亚洲美女av黄| 亚洲精品一级| 国产精品99久久99久久久二8| 久久久人成影片一区二区三区观看 | 久久久xxx| 欧美视频一区二区在线观看| 亚洲第一视频网站| 开元免费观看欧美电视剧网站| 一区二区三区精品国产| 国内在线观看一区二区三区| 午夜国产不卡在线观看视频| 在线视频免费在线观看一区二区| 欧美日韩91| 欧美+亚洲+精品+三区| 欧美成人精品一区| 亚洲国产成人在线播放| 性伦欧美刺激片在线观看| 国产亚洲欧美日韩美女| 日韩视频久久| 国产精品理论片| 久久在线观看视频| 欧美亚洲不卡| 欧美资源在线| 麻豆精品网站| 欧美aⅴ一区二区三区视频| 欧美大片va欧美在线播放| 亚洲视频精品| 另类天堂视频在线观看| 亚洲欧美国产视频| 久久www成人_看片免费不卡| 韩国av一区二区三区| 一本久久精品一区二区| 国产精品99久久99久久久二8| 久久久久久穴| 久久爱www久久做| 国产精品va在线播放我和闺蜜| 久久精品国产免费| 国产女同一区二区| 亚洲靠逼com| 老司机aⅴ在线精品导航| 国产精品久久久久久久久免费桃花| 亚洲三级网站| 欧美亚洲三级| 国产色综合天天综合网| 亚洲人成在线观看网站高清| 伊甸园精品99久久久久久| 先锋影音网一区二区| 久久人人精品| 亚洲欧美视频在线| 狠狠色狠狠色综合日日五| 欧美成人日韩| 久久国产精品99国产精| 女生裸体视频一区二区三区| 日韩视频免费在线| 影音先锋亚洲电影| 国产精品成人一区| 欧美一区二区三区免费观看| 欧美国产三区| 欧美大胆人体视频| 亚洲欧美韩国| 一区二区三区日韩精品视频| 国产女主播一区二区| 欧美日韩国产天堂| 欧美视频三区在线播放| 欧美一区永久视频免费观看| 亚洲网站啪啪| 亚洲国产精品专区久久 | 在线免费观看一区二区三区| 欧美日韩精品综合| 免费视频亚洲| 麻豆成人在线观看| 久久亚洲午夜电影| 美女黄毛**国产精品啪啪| 亚洲在线观看视频| 亚洲国产精品999| 一本色道久久综合狠狠躁的推荐| 日韩网站免费观看| 亚洲欧美一区二区在线观看| 亚洲女人天堂av| 欧美一级二区| 亚洲一区国产精品| 免费一级欧美片在线播放| 免费久久99精品国产|