锘??xml version="1.0" encoding="utf-8" standalone="yes"?>精品久久人人做人人爽综合,亚洲国产成人久久一区久久,国产精品久久影院http://www.shnenglu.com/gaimor/category/20054.htmlC/C++楂樼駭宸ョ▼甯? Android楂樼駭杞歡宸ョ▼甯? IT闆嗘垚宸ョ▼甯? 闊抽宸ョ▼甯? 鐔熸倝c,c++,java,c#,py,js,asp絳夊縐嶈璦 紼嬪簭鐚?/description>zh-cnTue, 18 Jun 2019 09:23:11 GMTTue, 18 Jun 2019 09:23:11 GMT60鍏竟褰㈡牸瀛愬湴鍥懼潗鏍囪綆?/title><link>http://www.shnenglu.com/gaimor/archive/2019/06/18/216419.html</link><dc:creator>ccsdu2009</dc:creator><author>ccsdu2009</author><pubDate>Tue, 18 Jun 2019 01:35:00 GMT</pubDate><guid>http://www.shnenglu.com/gaimor/archive/2019/06/18/216419.html</guid><wfw:comment>http://www.shnenglu.com/gaimor/comments/216419.html</wfw:comment><comments>http://www.shnenglu.com/gaimor/archive/2019/06/18/216419.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/gaimor/comments/commentRss/216419.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/gaimor/services/trackbacks/216419.html</trackback:ping><description><![CDATA[<p>鏈榪戣冭檻寮鍙戜竴嬈懼叺媯嬭蔣浠訛紝鍚嶅瓧閮芥兂濂戒簡錛屽彨鐘鐗涘叺媯嬶紝鎵撶畻鏀寔鍥涜竟褰㈠湴鍥懼拰鍏竟褰㈠湴鍥俱?/p> <p>鍓嶈呮瘮杈冨ソ璇達紝鍚庤呭湪鏍規嵁灞忓箷鍧愭爣璁$畻鏍煎瓙鍧愭爣鐨勬椂鍊欙紝紼嶅井鏈夌偣楹葷儲銆?/p> <p>鍏堣涓嬫垜浠殑鍧愭爣緋繪槸x杞村悜鍙籌紝y杞村悜涓婏紝鍘熺偣鍦ㄥ乏涓嬭銆?/p> <p>鏍煎瓙鍦板浘鍧愭爣濡備笅</p> <p><br /> </p> <p><img src="http://www.shnenglu.com/images/cppblog_com/gaimor/9916493-07c0469b609dd52c.png" alt="" width="678" height="540" border="0" /></p> <p><br /> </p> <p>鏍規嵁鏍煎瓙鍧愭爣璁$畻鍑哄搴斾笘鐣屽潗鏍囩郴鐨勫嚱鏁板涓?/p> <br /> <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #000000; "><br /> <br /> QPointF GridCell6Manager::getWorldPosByCellCoordinate(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> x,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> y)<br /> <br /> {<br /> <br /> </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (x </span><span style="color: #000000; ">%</span><span style="color: #000000; "> </span><span style="color: #000000; ">2</span><span style="color: #000000; "> </span><span style="color: #000000; ">==</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br /> <br /> </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> QPointF(</span><span style="color: #000000; ">1.5f</span><span style="color: #000000; ">*</span><span style="color: #000000; ">res</span><span style="color: #000000; ">*</span><span style="color: #000000; ">(x</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">),<br /> <br /> (</span><span style="color: #000000; ">0.5</span><span style="color: #000000; ">*</span><span style="color: #000000; ">R3</span><span style="color: #000000; ">+</span><span style="color: #000000; ">R3</span><span style="color: #000000; ">*</span><span style="color: #000000; ">y)</span><span style="color: #000000; ">*</span><span style="color: #000000; ">res);<br /> <br /> </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> QPointF(</span><span style="color: #000000; ">1.5f</span><span style="color: #000000; ">*</span><span style="color: #000000; ">res</span><span style="color: #000000; ">*</span><span style="color: #000000; ">(x </span><span style="color: #000000; ">+</span><span style="color: #000000; "> </span><span style="color: #000000; ">1</span><span style="color: #000000; ">),<br /> <br /> (R3 </span><span style="color: #000000; ">+</span><span style="color: #000000; "> y </span><span style="color: #000000; ">*</span><span style="color: #000000; "> R3)</span><span style="color: #000000; ">*</span><span style="color: #000000; ">res);<br /> <br /> }<br /> <br /> <br /> <br /> QPoint GridCell6Manager::getCellCoordinateByWorldPos(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> x,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> y)<br /> <br /> {<br /> <br /> QPoint point(</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br /> <br /> </span><span style="color: #0000FF; ">float</span><span style="color: #000000; "> xpos </span><span style="color: #000000; ">=</span><span style="color: #000000; "> x</span><span style="color: #000000; ">-</span><span style="color: #000000; ">res</span><span style="color: #000000; ">*</span><span style="color: #000000; ">0.5f</span><span style="color: #000000; ">;<br /> <br /> </span><span style="color: #0000FF; ">float</span><span style="color: #000000; "> ypos </span><span style="color: #000000; ">=</span><span style="color: #000000; "> y</span><span style="color: #000000; ">/</span><span style="color: #000000; ">(R3</span><span style="color: #000000; ">*</span><span style="color: #000000; ">res) </span><span style="color: #000000; ">-</span><span style="color: #000000; "> </span><span style="color: #000000; ">0.5f</span><span style="color: #000000; ">;<br /> <br /> </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> yset[</span><span style="color: #000000; ">2</span><span style="color: #000000; ">] </span><span style="color: #000000; ">=</span><span style="color: #000000; "> {std::floorf(ypos),std::ceilf(ypos)};<br /> <br /> xpos </span><span style="color: #000000; ">/=</span><span style="color: #000000; "> (</span><span style="color: #000000; ">1.5</span><span style="color: #000000; ">*</span><span style="color: #000000; ">World::getInstance().getWorldResolution());<br /> <br /> </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> xset[</span><span style="color: #000000; ">2</span><span style="color: #000000; ">] </span><span style="color: #000000; ">=</span><span style="color: #000000; "> { std::floorf(xpos),std::ceilf(xpos)};<br /> <br /> auto p00 </span><span style="color: #000000; ">=</span><span style="color: #000000; "> getWorldPosByCellCoordinate(xset[</span><span style="color: #000000; ">0</span><span style="color: #000000; ">],yset[</span><span style="color: #000000; ">0</span><span style="color: #000000; ">]);<br /> <br /> auto p01 </span><span style="color: #000000; ">=</span><span style="color: #000000; "> getWorldPosByCellCoordinate(xset[</span><span style="color: #000000; ">0</span><span style="color: #000000; ">],yset[</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]);<br /> <br /> auto p10 </span><span style="color: #000000; ">=</span><span style="color: #000000; "> getWorldPosByCellCoordinate(xset[</span><span style="color: #000000; ">1</span><span style="color: #000000; ">],yset[</span><span style="color: #000000; ">0</span><span style="color: #000000; ">]);<br /> <br /> auto p11 </span><span style="color: #000000; ">=</span><span style="color: #000000; "> getWorldPosByCellCoordinate(xset[</span><span style="color: #000000; ">1</span><span style="color: #000000; ">],yset[</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]);<br /> <br /> </span><span style="color: #0000FF; ">float</span><span style="color: #000000; "> d00 </span><span style="color: #000000; ">=</span><span style="color: #000000; "> distance2</span><span style="color: #000000; "><</span><span style="color: #0000FF; ">float</span><span style="color: #000000; ">></span><span style="color: #000000; ">(x,y,p00.x(),p00.y());<br /> <br /> </span><span style="color: #0000FF; ">float</span><span style="color: #000000; "> d01 </span><span style="color: #000000; ">=</span><span style="color: #000000; "> distance2</span><span style="color: #000000; "><</span><span style="color: #0000FF; ">float</span><span style="color: #000000; ">></span><span style="color: #000000; ">(x,y,p01.x(),p01.y());<br /> <br /> </span><span style="color: #0000FF; ">float</span><span style="color: #000000; "> d10 </span><span style="color: #000000; ">=</span><span style="color: #000000; "> distance2</span><span style="color: #000000; "><</span><span style="color: #0000FF; ">float</span><span style="color: #000000; ">></span><span style="color: #000000; ">(x,y,p10.x(),p10.y());<br /> <br /> </span><span style="color: #0000FF; ">float</span><span style="color: #000000; "> d11 </span><span style="color: #000000; ">=</span><span style="color: #000000; "> distance2</span><span style="color: #000000; "><</span><span style="color: #0000FF; ">float</span><span style="color: #000000; ">></span><span style="color: #000000; ">(x,y,p11.x(),p11.y());<br /> <br /> </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> i,j;<br /> <br /> </span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(d00 </span><span style="color: #000000; "><</span><span style="color: #000000; "> d01 </span><span style="color: #000000; ">&&</span><span style="color: #000000; "> d00 </span><span style="color: #000000; "><</span><span style="color: #000000; "> d10 </span><span style="color: #000000; ">&&</span><span style="color: #000000; "> d00 </span><span style="color: #000000; "><</span><span style="color: #000000; "> d11)<br /> <br /> {<br /> <br /> i </span><span style="color: #000000; ">=</span><span style="color: #000000; "> xset[</span><span style="color: #000000; ">0</span><span style="color: #000000; ">];<br /> <br /> j </span><span style="color: #000000; ">=</span><span style="color: #000000; "> yset[</span><span style="color: #000000; ">0</span><span style="color: #000000; ">];<br /> <br /> }<br /> <br /> </span><span style="color: #0000FF; ">else</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(d00 </span><span style="color: #000000; ">></span><span style="color: #000000; "> d01 </span><span style="color: #000000; ">&&</span><span style="color: #000000; "> d01 </span><span style="color: #000000; "><</span><span style="color: #000000; "> d10 </span><span style="color: #000000; ">&&</span><span style="color: #000000; "> d01 </span><span style="color: #000000; "><</span><span style="color: #000000; "> d11)<br /> <br /> {<br /> <br /> i </span><span style="color: #000000; ">=</span><span style="color: #000000; "> xset[</span><span style="color: #000000; ">0</span><span style="color: #000000; ">];<br /> <br /> j </span><span style="color: #000000; ">=</span><span style="color: #000000; "> yset[</span><span style="color: #000000; ">1</span><span style="color: #000000; ">];<br /> <br /> }<br /> <br /> </span><span style="color: #0000FF; ">else</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(d10 </span><span style="color: #000000; "><</span><span style="color: #000000; "> d00 </span><span style="color: #000000; ">&&</span><span style="color: #000000; "> d10 </span><span style="color: #000000; "><</span><span style="color: #000000; "> d01 </span><span style="color: #000000; ">&&</span><span style="color: #000000; "> d10 </span><span style="color: #000000; "><</span><span style="color: #000000; "> d11)<br /> <br /> {<br /> <br /> i </span><span style="color: #000000; ">=</span><span style="color: #000000; "> xset[</span><span style="color: #000000; ">1</span><span style="color: #000000; ">];<br /> <br /> j </span><span style="color: #000000; ">=</span><span style="color: #000000; "> yset[</span><span style="color: #000000; ">0</span><span style="color: #000000; ">];<br /> <br /> }<br /> <br /> </span><span style="color: #0000FF; ">else</span><span style="color: #000000; "><br /> <br /> {<br /> <br /> i </span><span style="color: #000000; ">=</span><span style="color: #000000; "> xset[</span><span style="color: #000000; ">1</span><span style="color: #000000; ">];<br /> <br /> j </span><span style="color: #000000; ">=</span><span style="color: #000000; "> yset[</span><span style="color: #000000; ">1</span><span style="color: #000000; ">];<br /> <br /> }<br /> <br /> </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> QPoint(i,j);<br /> <br /> }</span></div> <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><span style="color: #000000; ">鍏朵腑res涓烘牸瀛愯竟闀匡紝R3涓簊qrt(3)甯擱噺<br /><br />鍦ㄨ繖涓熀紜涓婂氨鍙互璁$畻浠庝笘鐣屽潗鏍囧埌鏍煎瓙鍧愭爣鐨勮漿鎹簡<br /> </span></div> <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><span style="color: #000000; "><br /> </span></div> <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><span style="color: #000000; "><br /> </span></div> <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><span style="color: #000000; "><br /> </span></div><img src ="http://www.shnenglu.com/gaimor/aggbug/216419.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/gaimor/" target="_blank">ccsdu2009</a> 2019-06-18 09:35 <a href="http://www.shnenglu.com/gaimor/archive/2019/06/18/216419.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>鍩轟簬winnet鐨勬柇鐐逛笅杞戒唬鐮?/title><link>http://www.shnenglu.com/gaimor/archive/2019/03/14/216297.html</link><dc:creator>ccsdu2009</dc:creator><author>ccsdu2009</author><pubDate>Thu, 14 Mar 2019 08:31:00 GMT</pubDate><guid>http://www.shnenglu.com/gaimor/archive/2019/03/14/216297.html</guid><wfw:comment>http://www.shnenglu.com/gaimor/comments/216297.html</wfw:comment><comments>http://www.shnenglu.com/gaimor/archive/2019/03/14/216297.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/gaimor/comments/commentRss/216297.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/gaimor/services/trackbacks/216297.html</trackback:ping><description><![CDATA[<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">#include </span><span style="color: #000000; "><</span><span style="color: #000000; ">Windows.h</span><span style="color: #000000; ">></span><span style="color: #000000; ">   <br />#include </span><span style="color: #000000; "><</span><span style="color: #000000; ">wininet.h</span><span style="color: #000000; ">></span><span style="color: #000000; ">   <br />#include </span><span style="color: #000000; "><</span><span style="color: #000000; ">stdio.h</span><span style="color: #000000; ">></span><span style="color: #000000; ">   <br />#include </span><span style="color: #000000; "><</span><span style="color: #0000FF; ">string</span><span style="color: #000000; ">></span><span style="color: #000000; ">   <br />#include </span><span style="color: #000000; "><</span><span style="color: #000000; ">io.h</span><span style="color: #000000; ">></span><span style="color: #000000; "><br /><br /></span><span style="color: #0000FF; ">using</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">namespace</span><span style="color: #000000; "> std;<br /><br />#pragma comment(lib, </span><span style="color: #000000; ">"</span><span style="color: #000000; ">wininet.lib</span><span style="color: #000000; ">"</span><span style="color: #000000; ">)<br /><br /></span><span style="color: #0000FF; ">const</span><span style="color: #000000; "> DWORD DWORD_MAX_CCH_OF_TEST_URL </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">256</span><span style="color: #000000; ">;<br /></span><span style="color: #0000FF; ">const</span><span style="color: #000000; "> DWORD DWORD_MAX_CCH_OF_HOST_NAME </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">128</span><span style="color: #000000; ">;<br /></span><span style="color: #0000FF; ">const</span><span style="color: #000000; "> DWORD DWORD_MAX_CCH_OF_URL_PATH </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">256</span><span style="color: #000000; ">;<br /><br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> breakpointDownload(</span><span style="color: #0000FF; ">const</span><span style="color: #000000; "> std::wstring</span><span style="color: #000000; ">&</span><span style="color: #000000; "> url, </span><span style="color: #0000FF; ">const</span><span style="color: #000000; "> std::wstring</span><span style="color: #000000; ">&</span><span style="color: #000000; "> folder, </span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">(</span><span style="color: #000000; ">*</span><span style="color: #000000; ">cb)(</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">),std::wstring</span><span style="color: #000000; ">&</span><span style="color: #000000; "> name)<br />{<br />    </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> index </span><span style="color: #000000; ">=</span><span style="color: #000000; "> url.find_last_of(L</span><span style="color: #000000; ">'</span><span style="color: #000000; ">/</span><span style="color: #000000; ">'</span><span style="color: #000000; ">);<br />    std::wstring filename </span><span style="color: #000000; ">=</span><span style="color: #000000; "> url.substr(index </span><span style="color: #000000; ">+</span><span style="color: #000000; "> </span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br />    index </span><span style="color: #000000; ">=</span><span style="color: #000000; "> filename.find_first_of(L</span><span style="color: #000000; ">'</span><span style="color: #000000; ">?</span><span style="color: #000000; ">'</span><span style="color: #000000; ">);<br />    </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (index </span><span style="color: #000000; ">!=</span><span style="color: #000000; "> std::wstring::npos)<br />        filename </span><span style="color: #000000; ">=</span><span style="color: #000000; "> filename.substr(</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,index);<br /><br />    </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (</span><span style="color: #000000; ">!</span><span style="color: #000000; ">folder.empty())<br />        filename </span><span style="color: #000000; ">=</span><span style="color: #000000; "> folder </span><span style="color: #000000; ">+</span><span style="color: #000000; "> L</span><span style="color: #000000; ">"</span><span style="color: #000000; ">\\</span><span style="color: #000000; ">"</span><span style="color: #000000; "> </span><span style="color: #000000; ">+</span><span style="color: #000000; "> filename;<br /><br />    std::wstring tempfile </span><span style="color: #000000; ">=</span><span style="color: #000000; "> filename </span><span style="color: #000000; ">+</span><span style="color: #000000; "> L</span><span style="color: #000000; ">"</span><span style="color: #000000; ">.dl</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br /><br />    _wremove(filename.c_str());<br /><br />    HINTERNET hInetOpen </span><span style="color: #000000; ">=</span><span style="color: #000000; "> NULL;<br />    HINTERNET hInetConnect </span><span style="color: #000000; ">=</span><span style="color: #000000; "> NULL;<br />    HINTERNET hInetRequest </span><span style="color: #000000; ">=</span><span style="color: #000000; "> NULL;<br />    HANDLE lhFile </span><span style="color: #000000; ">=</span><span style="color: #000000; "> NULL;<br />    <br />    URL_COMPONENTS ldCrackedURL;<br />    ZeroMemory(</span><span style="color: #000000; ">&</span><span style="color: #000000; ">ldCrackedURL, </span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(URL_COMPONENTS));<br />    ldCrackedURL.dwStructSize </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(URL_COMPONENTS);                <br /><br />    TCHAR szHostName[DWORD_MAX_CCH_OF_HOST_NAME] </span><span style="color: #000000; ">=</span><span style="color: #000000; "> { </span><span style="color: #000000; ">0</span><span style="color: #000000; "> };<br />    ldCrackedURL.lpszHostName </span><span style="color: #000000; ">=</span><span style="color: #000000; "> szHostName;<br />    ldCrackedURL.dwHostNameLength </span><span style="color: #000000; ">=</span><span style="color: #000000; "> DWORD_MAX_CCH_OF_HOST_NAME;         <br />    <br />    wchar_t szUrlPath[DWORD_MAX_CCH_OF_URL_PATH] </span><span style="color: #000000; ">=</span><span style="color: #000000; "> { </span><span style="color: #000000; ">0</span><span style="color: #000000; "> };<br />    ldCrackedURL.lpszUrlPath </span><span style="color: #000000; ">=</span><span style="color: #000000; "> szUrlPath;<br />    ldCrackedURL.dwUrlPathLength </span><span style="color: #000000; ">=</span><span style="color: #000000; "> DWORD_MAX_CCH_OF_URL_PATH;        <br /><br />    </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (FALSE </span><span style="color: #000000; ">==</span><span style="color: #000000; "> InternetCrackUrl(url.c_str(),url.size(), </span><span style="color: #000000; ">0</span><span style="color: #000000; ">, </span><span style="color: #000000; ">&</span><span style="color: #000000; ">ldCrackedURL))<br />    {<br />        </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />    }<br /><br />    hInetOpen </span><span style="color: #000000; ">=</span><span style="color: #000000; "> InternetOpen(L</span><span style="color: #000000; ">"</span><span style="color: #000000; ">MSIE/1.0</span><span style="color: #000000; ">"</span><span style="color: #000000; ">, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, </span><span style="color: #000000; ">0</span><span style="color: #000000; ">);<br />    </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (NULL </span><span style="color: #000000; ">==</span><span style="color: #000000; "> hInetOpen)<br />    {<br />        </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />    }<br /><br />    hInetConnect </span><span style="color: #000000; ">=</span><span style="color: #000000; "> InternetConnect(hInetOpen, ldCrackedURL.lpszHostName, ldCrackedURL.nPort, NULL, NULL, INTERNET_SERVICE_HTTP, </span><span style="color: #000000; ">0</span><span style="color: #000000; ">, </span><span style="color: #000000; ">0</span><span style="color: #000000; ">);<br />    </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (NULL </span><span style="color: #000000; ">==</span><span style="color: #000000; "> hInetConnect)<br />    {<br />        </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />    }<br /> <br />    lhFile </span><span style="color: #000000; ">=</span><span style="color: #000000; "> CreateFile(tempfile.c_str(), GENERIC_READ </span><span style="color: #000000; ">|</span><span style="color: #000000; "> GENERIC_WRITE, </span><span style="color: #000000; ">0</span><span style="color: #000000; ">, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);<br />    </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (lhFile </span><span style="color: #000000; ">==</span><span style="color: #000000; "> INVALID_HANDLE_VALUE)<br />    {<br />        </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />    }<br /><br />    LARGE_INTEGER ldFileSize;<br />    </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (FALSE </span><span style="color: #000000; ">==</span><span style="color: #000000; "> GetFileSizeEx(lhFile, </span><span style="color: #000000; ">&</span><span style="color: #000000; ">ldFileSize))<br />    {<br />        </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />    }<br /><br />    LONGLONG lllStartPos </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />    </span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(</span><span style="color: #000000; ">0</span><span style="color: #000000; "> </span><span style="color: #000000; ">==</span><span style="color: #000000; "> ldFileSize.QuadPart)<br />    {<br />    }<br />    </span><span style="color: #0000FF; ">else</span><span style="color: #000000; "><br />    {<br />        </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (INVALID_SET_FILE_POINTER </span><span style="color: #000000; ">==</span><span style="color: #000000; "> SetFilePointer(lhFile, </span><span style="color: #000000; ">0</span><span style="color: #000000; ">, NULL, FILE_END))<br />        {<br />            </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />        }<br /><br />        lllStartPos </span><span style="color: #000000; ">=</span><span style="color: #000000; "> ldFileSize.QuadPart;<br />    }<br /><br />    wchar_t lscRangeStartPosition[</span><span style="color: #000000; ">30</span><span style="color: #000000; ">] </span><span style="color: #000000; ">=</span><span style="color: #000000; "> { </span><span style="color: #000000; ">0</span><span style="color: #000000; "> };<br />    </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (</span><span style="color: #000000; ">0</span><span style="color: #000000; "> </span><span style="color: #000000; ">!=</span><span style="color: #000000; "> _i64tow_s((__int64)(lllStartPos), lscRangeStartPosition, </span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(lscRangeStartPosition), </span><span style="color: #000000; ">10</span><span style="color: #000000; ">))<br />    {<br />        </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />    }<br /><br />    wstring loAdditionalHeader </span><span style="color: #000000; ">=</span><span style="color: #000000; "> L</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Range: bytes=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br />    loAdditionalHeader </span><span style="color: #000000; ">+=</span><span style="color: #000000; "> lscRangeStartPosition;            <br />    loAdditionalHeader </span><span style="color: #000000; ">+=</span><span style="color: #000000; "> L</span><span style="color: #000000; ">"</span><span style="color: #000000; ">-\r\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br /><br />    </span><span style="color: #0000FF; ">const</span><span style="color: #000000; "> wchar_t</span><span style="color: #000000; ">*</span><span style="color: #000000; "> lplpszAcceptTypes[] </span><span style="color: #000000; ">=</span><span style="color: #000000; "> { L</span><span style="color: #000000; ">"</span><span style="color: #000000; ">*/*</span><span style="color: #000000; ">"</span><span style="color: #000000; ">, NULL };<br />    hInetRequest </span><span style="color: #000000; ">=</span><span style="color: #000000; "> HttpOpenRequest(hInetConnect,L</span><span style="color: #000000; ">"</span><span style="color: #000000; ">GET</span><span style="color: #000000; ">"</span><span style="color: #000000; ">, ldCrackedURL.lpszUrlPath,L</span><span style="color: #000000; ">"</span><span style="color: #000000; ">HTTP/1.1</span><span style="color: #000000; ">"</span><span style="color: #000000; ">, NULL,lplpszAcceptTypes, </span><span style="color: #000000; ">0</span><span style="color: #000000; ">, </span><span style="color: #000000; ">0</span><span style="color: #000000; ">);<br />    </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (NULL </span><span style="color: #000000; ">==</span><span style="color: #000000; "> hInetConnect)<br />    {<br />        </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />    }<br /><br />    </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (FALSE </span><span style="color: #000000; ">==</span><span style="color: #000000; "> HttpSendRequest(hInetRequest, loAdditionalHeader.c_str(), loAdditionalHeader.size(), NULL, </span><span style="color: #000000; ">0</span><span style="color: #000000; ">))<br />    {<br />        </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />    }<br /><br />    DWORD ldwStatusCode;<br />    DWORD ldwCbOfStatusCode </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(ldwStatusCode);<br />    </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (FALSE </span><span style="color: #000000; ">==</span><span style="color: #000000; "> HttpQueryInfo(hInetRequest, HTTP_QUERY_STATUS_CODE </span><span style="color: #000000; ">|</span><span style="color: #000000; "> HTTP_QUERY_FLAG_NUMBER, </span><span style="color: #000000; ">&</span><span style="color: #000000; ">ldwStatusCode, </span><span style="color: #000000; ">&</span><span style="color: #000000; ">ldwCbOfStatusCode, </span><span style="color: #000000; ">0</span><span style="color: #000000; ">))<br />    {<br />        </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />    }<br /><br />    </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (</span><span style="color: #000000; ">416</span><span style="color: #000000; "> </span><span style="color: #000000; ">==</span><span style="color: #000000; "> ldwStatusCode)        <br />    {<br />        _wrename(tempfile.c_str(), filename.c_str());<br />        name </span><span style="color: #000000; ">=</span><span style="color: #000000; "> filename;<br />        </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> </span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />    }<br />    </span><span style="color: #0000FF; ">else</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (</span><span style="color: #000000; ">200</span><span style="color: #000000; "> </span><span style="color: #000000; ">!=</span><span style="color: #000000; "> ldwStatusCode </span><span style="color: #000000; ">&&</span><span style="color: #000000; "> </span><span style="color: #000000; ">206</span><span style="color: #000000; "> </span><span style="color: #000000; ">!=</span><span style="color: #000000; "> ldwStatusCode)  <br />    {<br />        </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />    }<br /><br />    DWORD dwFile </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">10000</span><span style="color: #000000; ">;<br />    DWORD dwSize </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(DWORD);<br />    </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (FALSE </span><span style="color: #000000; ">==</span><span style="color: #000000; "> HttpQueryInfo(hInetRequest, HTTP_QUERY_CONTENT_LENGTH </span><span style="color: #000000; ">|</span><span style="color: #000000; "> HTTP_QUERY_FLAG_NUMBER, </span><span style="color: #000000; ">&</span><span style="color: #000000; ">dwFile, </span><span style="color: #000000; ">&</span><span style="color: #000000; ">dwSize, </span><span style="color: #000000; ">0</span><span style="color: #000000; ">))<br />    {<br />    }<br />    </span><span style="color: #0000FF; ">else</span><span style="color: #000000; "><br />        dwFile </span><span style="color: #000000; ">+=</span><span style="color: #000000; "> lllStartPos;<br /><br />    BYTE lpbBufferToReceiveData[</span><span style="color: #000000; ">2048</span><span style="color: #000000; ">];   <br />    DWORD ldwCbBuffer </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">2048</span><span style="color: #000000; ">;<br />    DWORD ldwCrtCbReaded;            <br />    DWORD ldwCbWritten </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">;              <br />    </span><span style="color: #0000FF; ">bool</span><span style="color: #000000; "> lbIsOk </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">false</span><span style="color: #000000; ">;<br /><br />    LONGLONG lllCbAllRead </span><span style="color: #000000; ">=</span><span style="color: #000000; "> lllStartPos;<br />    </span><span style="color: #0000FF; ">do</span><span style="color: #000000; "><br />    {<br />        </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (FALSE </span><span style="color: #000000; ">==</span><span style="color: #000000; "> InternetReadFile(hInetRequest, lpbBufferToReceiveData, ldwCbBuffer, </span><span style="color: #000000; ">&</span><span style="color: #000000; ">ldwCrtCbReaded))<br />        {<br />            </span><span style="color: #0000FF; ">break</span><span style="color: #000000; ">;<br />        }<br /><br />        </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (ldwCrtCbReaded </span><span style="color: #000000; ">==</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">)           <br />        {<br />            </span><span style="color: #0000FF; ">break</span><span style="color: #000000; ">;<br />        }<br /><br />        </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (FALSE </span><span style="color: #000000; ">==</span><span style="color: #000000; "> WriteFile(lhFile, lpbBufferToReceiveData, ldwCrtCbReaded, </span><span style="color: #000000; ">&</span><span style="color: #000000; ">ldwCbWritten, NULL) </span><span style="color: #000000; ">||</span><span style="color: #000000; "> ldwCbWritten </span><span style="color: #000000; ">!=</span><span style="color: #000000; "> ldwCrtCbReaded)<br />        {<br />            </span><span style="color: #0000FF; ">break</span><span style="color: #000000; ">;<br />        }<br /><br />        ZeroMemory(lpbBufferToReceiveData, ldwCrtCbReaded);<br /><br />        lllCbAllRead </span><span style="color: #000000; ">+=</span><span style="color: #000000; "> ldwCrtCbReaded;<br /><br />        </span><span style="color: #0000FF; ">double</span><span style="color: #000000; "> p </span><span style="color: #000000; ">=</span><span style="color: #000000; "> lllCbAllRead </span><span style="color: #000000; ">*</span><span style="color: #000000; "> </span><span style="color: #000000; ">100.0</span><span style="color: #000000; "> </span><span style="color: #000000; ">/</span><span style="color: #000000; "> dwFile;<br />        </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (p </span><span style="color: #000000; ">></span><span style="color: #000000; "> </span><span style="color: #000000; ">100</span><span style="color: #000000; ">)<br />            p </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">100</span><span style="color: #000000; ">;<br />        </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (cb)<br />            cb(p);<br />    } </span><span style="color: #0000FF; ">while</span><span style="color: #000000; "> (</span><span style="color: #0000FF; ">true</span><span style="color: #000000; ">);<br /><br />    </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (NULL </span><span style="color: #000000; ">!=</span><span style="color: #000000; "> lhFile)<br />    {<br />        CloseHandle(lhFile);<br />    }<br /><br />    </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (NULL </span><span style="color: #000000; ">!=</span><span style="color: #000000; "> hInetRequest)<br />    {<br />        InternetCloseHandle(hInetRequest);<br />    }<br />    </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (NULL </span><span style="color: #000000; ">!=</span><span style="color: #000000; "> hInetConnect)<br />    {<br />        InternetCloseHandle(hInetConnect);<br />    }<br />    </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (NULL </span><span style="color: #000000; ">!=</span><span style="color: #000000; "> hInetOpen)<br />    {<br />        InternetCloseHandle(hInetOpen);<br />    }<br /><br />    _wrename(tempfile.c_str(), filename.c_str());<br />    name </span><span style="color: #000000; ">=</span><span style="color: #000000; "> filename;<br />    </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> </span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />}</span></div><img src ="http://www.shnenglu.com/gaimor/aggbug/216297.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/gaimor/" target="_blank">ccsdu2009</a> 2019-03-14 16:31 <a href="http://www.shnenglu.com/gaimor/archive/2019/03/14/216297.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>SQLITE 鏃ユ湡瀛楃涓插姞鍑忔棩鏈熶緥瀛?/title><link>http://www.shnenglu.com/gaimor/archive/2016/06/03/213645.html</link><dc:creator>ccsdu2009</dc:creator><author>ccsdu2009</author><pubDate>Fri, 03 Jun 2016 02:28:00 GMT</pubDate><guid>http://www.shnenglu.com/gaimor/archive/2016/06/03/213645.html</guid><wfw:comment>http://www.shnenglu.com/gaimor/comments/213645.html</wfw:comment><comments>http://www.shnenglu.com/gaimor/archive/2016/06/03/213645.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/gaimor/comments/commentRss/213645.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/gaimor/services/trackbacks/213645.html</trackback:ping><description><![CDATA[<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">select ShareAm.date,SharePm.code,ShareAm.opening,SharePm.open,</span><span style="color: #000000; ">100</span><span style="color: #000000; ">*</span><span style="color: #000000; ">(SharePm.open </span><span style="color: #000000; ">-</span><span style="color: #000000; "> ShareAm.opening)</span><span style="color: #000000; ">/</span><span style="color: #000000; ">ShareAm.opening </span><span style="color: #0000FF; ">as</span><span style="color: #000000; "> L <br />from SharePm,QQ,ShareAm<br />where ShareAm.date </span><span style="color: #000000; ">=</span><span style="color: #000000; "> QQ.date and <br />      SharePm.code </span><span style="color: #000000; ">=</span><span style="color: #000000; "> QQ.code and<br />      ShareAm.code </span><span style="color: #000000; ">=</span><span style="color: #000000; "> SharePm.code and <br />      date(ShareAm.date,</span><span style="color: #000000; ">'</span><span style="color: #000000; ">+1 day</span><span style="color: #000000; ">'</span><span style="color: #000000; ">) </span><span style="color: #000000; ">=</span><span style="color: #000000; "> SharePm.date <br />order by SharePm.date asc <br /></span></div><img src ="http://www.shnenglu.com/gaimor/aggbug/213645.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/gaimor/" target="_blank">ccsdu2009</a> 2016-06-03 10:28 <a href="http://www.shnenglu.com/gaimor/archive/2016/06/03/213645.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>BGE GUI鍗囩駭http://www.shnenglu.com/gaimor/archive/2016/03/17/213054.htmlccsdu2009ccsdu2009Thu, 17 Mar 2016 03:13:00 GMThttp://www.shnenglu.com/gaimor/archive/2016/03/17/213054.htmlhttp://www.shnenglu.com/gaimor/comments/213054.htmlhttp://www.shnenglu.com/gaimor/archive/2016/03/17/213054.html#Feedback1http://www.shnenglu.com/gaimor/comments/commentRss/213054.htmlhttp://www.shnenglu.com/gaimor/services/trackbacks/213054.htmlAPI涓婂弬鑰冧簡Qt
  1. 鏀寔png鏍煎紡
  2. 鏀寔鎺т歡搴忓垪鍖栵紝鍙嶅簭鍒楀寲
  3. 鏀寔鎹㈣偆
  4. 浠g爜鏁存磥錛岄鏍艱壇濂?/li>
  5. 鎻愪緵StackLayout,BoxLayout,GridLayout,FlowLayout
  6. 鎻愪緵CheckBox,Panel,StaticText,ImageBox,ProgressBar,TableWidget,Slider,EditFiled,Combox絳夊父鐢ㄦ帶浠?/li>

鎴浘濡備笅:


渚嬪瓙1

#include <BGE/All>

using namespace bge;

class Dispatcher : public SlotHolder
{
public:
    Dispatcher(ImageBox
* image,Button* button)
    {
        image_ 
= image;
        button_ 
= button;
        count_ 
= 1;
    }

    
void click()
    {
        std::
string file = ":box/side";
        file 
+= toString(count_);
        file 
+= ".png";
        image_
->setImage(file);
        count_ 
++;
        
if(count_ == 7)
            count_ 
= 1;
    }
private:
    ImageBox
* image_;
    Button
* button_;
    
int count_;
};

int main(int argc,char* argv[])
{
    FileSystem::instance().initial(argv[
0]);
    FileSystem::instance().setResourcePackage(
"data.zip");
    WindowManager::instance().initialize(
":accid.ttf",false);

    Device
* device = Device::create();
    device
->initial();
    device
->createWindow(640,480,String("BGE Window"));

    Panel
* panel = new Panel();
    panel
->setPosition(Vector2f(20,20));
    panel
->setSize(Vector2f(128,128+24));

    ImageBox
* image = new ImageBox();
    image
->setImage(":box/side6.png");
    image
->setPosition(Vector2f(0,0));
    image
->setSize(Vector2f(128,128));

    Button
* button = new Button();
    button
->loadAppearance(":buttonskin1.xml");
    button
->setSize(Vector2f(128,24));
    button
->setText(L"Click");

    Dispatcher dispacher(image,button);
    button
->clicked.connect(&dispacher,&Dispatcher::click);

    BoxLayout
* layout = new BoxLayout();
    layout
->setSpacing(.0f);
    panel
->setLayout(layout);
    layout
->setJustification(Orientation_vertical);
    layout
->addWindow(image);
    layout
->addWindow(button);

    panel
->adjust();

    WindowManager::instance().addWindow(panel);

    
while(device->isRunning())
    {
        device
->preRender();

        WindowManager::instance().update();

        device
->swapBuffers();
        device
->pollEvents();
    }

    WindowManager::instance().terminate();
    device
->closeWindow();
    device
->terminate();
    device
->deleteLater();
    
return 0;
}
渚嬪瓙2
#include <BGE/All>

using namespace bge;

class Dispatcher : public SlotHolder
{
public:
    Dispatcher(StackLayout
* layout,Button* button)
    {
        layout_ 
= layout;
        button_ 
= button;
        count_ 
= 0;
    }

    
void click()
    {
        layout_
->setCurrentIndex(count_);
        count_ 
++;
        
if(count_ > 5)
            count_ 
= 0;
    }
private:
    StackLayout
* layout_;
    Button
* button_;
    
int count_;
};

int main(int argc,char* argv[])
{
    FileSystem::instance().initial(argv[
0]);
    FileSystem::instance().setResourcePackage(
"data.zip");
    WindowManager::instance().initialize(
":accid.ttf",false);

    Device
* device = Device::create();
    device
->initial();
    device
->createWindow(640,480,String("BGE Window"));

    Panel
* panel = new Panel();
    panel
->setPosition(Vector2f(20,20));
    panel
->setSize(Vector2f(128,128+24));

    Panel
* stackPanel = new Panel();
    stackPanel
->setSize(Vector2f(128,128));

    StackLayout
* stackLayout = new StackLayout();
    stackPanel
->setLayout(stackLayout);
    stackLayout
->setSpacing(.0f);
    
for(int i=1;i<7;i++)
    {
        ImageBox
* image = new ImageBox();
        std::
string file = ":box/side";
        file 
+= toString(i);
        file 
+= ".png";
        image
->setImage(file);
        image
->setPosition(Vector2f(0,0));
        image
->setSize(Vector2f(128,128));
        stackLayout
->insertWindow(i,image);
    }

    Button
* button = new Button();
    button
->loadAppearance(":buttonskin1.xml");
    button
->setSize(Vector2f(128,24));
    button
->setText(L"Click");

    Dispatcher dispacher(stackLayout,button);
    button
->clicked.connect(&dispacher,&Dispatcher::click);

    BoxLayout
* layout = new BoxLayout();
    layout
->setSpacing(.0f);
    panel
->setLayout(layout);
    layout
->setJustification(Orientation_vertical);
    layout
->addWindow(stackPanel);
    layout
->addWindow(button);

    panel
->adjust();

    WindowManager::instance().addWindow(panel);

    
while(device->isRunning())
    {
        device
->preRender();

        WindowManager::instance().update();

        device
->swapBuffers();
        device
->pollEvents();
    }

    WindowManager::instance().terminate();
    device
->closeWindow();
    device
->terminate();
    device
->deleteLater();
    
return 0;
}
榪?涓樉紺烘晥鏋滃畬鍏ㄤ竴鏍?br />嬈㈣繋涓嬭澆







鍦ㄨ繖閲屼笅杞?
http://download.csdn.net/detail/ccsdu2004/9464121

浠g爜鏈夌偣澶?榪欓噷鏀句笉涓?br />


ccsdu2009 2016-03-17 11:13 鍙戣〃璇勮
]]>
鍦ㄥ仛涓涓熀浜嶰PENGL鐨凣UI搴擄紝甯屾湜鏂逛究濂界敤.http://www.shnenglu.com/gaimor/archive/2016/01/07/212628.htmlccsdu2009ccsdu2009Thu, 07 Jan 2016 08:20:00 GMThttp://www.shnenglu.com/gaimor/archive/2016/01/07/212628.htmlhttp://www.shnenglu.com/gaimor/comments/212628.htmlhttp://www.shnenglu.com/gaimor/archive/2016/01/07/212628.html#Feedback0http://www.shnenglu.com/gaimor/comments/commentRss/212628.htmlhttp://www.shnenglu.com/gaimor/services/trackbacks/212628.html#include <BGE/all>

using namespace bge;

int main(int argc,char* argv[])
{
    
//!鍒濆鍖栨枃浠剁郴緇?/span>
    FileSystem::instance()->initial(argv[0]);
    
//!鍔犺澆鍘嬬緝鍖?/span>
    FileSystem::instance()->setResourcePackage("data.zip");
    
//!鍒濆鍖朥I綆$悊鍣?璁懼畾榛樿瀛椾綋,騫惰瀹氳嚜鍔ㄥ垹闄ゆ帶浠?/span>
    WindowManager::instance().initialize("simkai.ttf",true);

    
//!鐢熸垚鍜屽垵濮嬪寲紿楀彛璁懼
    Device* device = bgeCreateDevice();
    device
->initial();
    device
->createWindow(640,480,bge::String("BGE Window"));
    
    
//!浠庤祫婧愭枃浠跺姞杞芥帶浠跺寘鍚瓙鎺т歡鍜屾帶浠跺睘鎬?/span>
    Window* window = WindowManager::instance().create("window.xml");
    bge::WindowManager::instance().addWindow(listbox);

    
while(device->isRunning())
    {
        
//!棰勬覆鏌撹澶?/span>
        device->perRender();
        
//!紿椾綋鏇存柊
        bge::WindowManager::instance().update();
        
        device
->swapBuffers();
        device
->pollEvents();
    }

    
//!閿姣佺獥浣撶鐞嗗櫒
    bge::WindowManager::instance().terminate();
    
//!鍏抽棴騫墮攢姣佽澶?/span>
    device->closeWindow();
    device
->terminate();
    device
->deleteLater();

    system(
"pause");
    
return 0;
}

榪樻病鍋氬畬錛岀敤娉曞涓婏紝寰堢畝緇冨惂:D

浠涔堬紵瀵規暣浣撹鏁堜笉婊℃剰錛?br />璇曚笅榪欎釜:
WindowManager::instance().propertyScheme()->load("skin.xml");
鎯沖畾鍒舵煇涓帶浠剁殑瑙嗘晥?
Button* button = window->findChild("ok");
button->loadAppearance("button.xml","blue");



ccsdu2009 2016-01-07 16:20 鍙戣〃璇勮
]]>
浣跨敤libpng瑙g爜png鏂囦歡http://www.shnenglu.com/gaimor/archive/2015/12/29/212577.htmlccsdu2009ccsdu2009Tue, 29 Dec 2015 03:12:00 GMThttp://www.shnenglu.com/gaimor/archive/2015/12/29/212577.htmlhttp://www.shnenglu.com/gaimor/comments/212577.htmlhttp://www.shnenglu.com/gaimor/archive/2015/12/29/212577.html#Feedback0http://www.shnenglu.com/gaimor/comments/commentRss/212577.htmlhttp://www.shnenglu.com/gaimor/services/trackbacks/212577.html浠ヤ笅浠g爜涓轟嬌鐢ㄨ櫄鎷烮OReader鐨勬柟寮忥紝紼嶅仛淇敼灝卞熀浜嶧ILE浣跨敤
浠g爜寰堣緇嗭紝涓嶉渶棰濆瑙i噴
PNGImage::PNGImage(const std::string& filename):
    ReferenceCountedImage(filename),
    data_(
0)
{
    IOReader
* reader = FileSystem::instance()->readFile(filename);
    
if(reader == 0)
        
return;

    png_structp png_ptr 
= png_create_read_struct(PNG_LIBPNG_VER_STRING, 000);
    
if(png_ptr == 0)
    {
        reader
->close();
        reader
->deleteLater();
    }

    png_infop info_ptr 
= png_create_info_struct(png_ptr);
    
if(info_ptr == 0)
    {
        png_destroy_read_struct(
&png_ptr, png_infopp(0), png_infopp(0));
        reader
->close();
        reader
->deleteLater();
    }

    
if(setjmp(png_jmpbuf(png_ptr)))
    {
        png_destroy_read_struct(
&png_ptr,png_infopp(0),png_infopp(0));
        reader
->close();
        reader
->deleteLater();
    }

    png_set_read_fn( png_ptr,reader,(png_rw_ptr)user_read_data);

    png_set_sig_bytes(png_ptr,
0);

    png_read_png(png_ptr,info_ptr,PNG_TRANSFORM_IDENTITY,
0);
    
const unsigned int width = png_get_image_width(png_ptr,info_ptr);
    
const unsigned int height = png_get_image_height(png_ptr,info_ptr);
    
const unsigned int bit_depth = png_get_bit_depth(png_ptr,info_ptr);
    
if(bit_depth != 8)
    {
        reader
->close();
        reader
->deleteLater();
        png_destroy_info_struct(png_ptr,png_infopp(
&info_ptr));
        png_destroy_read_struct(
&png_ptr,png_infopp(0), png_infopp(0));
    }

    
const png_byte colorType = png_get_color_type(png_ptr, info_ptr);
    
if((colorType != PNG_COLOR_TYPE_RGB) && (colorType != PNG_COLOR_TYPE_RGB_ALPHA))
    {
        reader
->close();
        reader
->deleteLater();
        png_destroy_info_struct(png_ptr, png_infopp(
&info_ptr));
        png_destroy_read_struct(
&png_ptr, png_infopp(0), png_infopp(0));
    }

    
const int bytesPerPixel = (colorType == PNG_COLOR_TYPE_RGB) ? 3 : 4;
    
const int stride = bytesPerPixel * width;

    unsigned 
char* data = new unsigned char[stride * height];
    png_bytep
* row_pointers = png_get_rows(png_ptr, info_ptr);
    
for(unsigned int i = 0; i < height; ++i)
    {
        
const unsigned int row = height - i - 1;
        memcpy(data 
+ (row * stride), row_pointers[i], stride);
    }

    size_.x_ 
= width;
    size_.y_ 
= height;
    numberOfBitsPerPixel_ 
= bytesPerPixel * 8;
    data_ 
= data;

    reader
->close();
    reader
->deleteLater();
    png_destroy_info_struct(png_ptr, png_infopp(
&info_ptr));
    png_destroy_read_struct(
&png_ptr, png_infopp(0), png_infopp(0));
}


ccsdu2009 2015-12-29 11:12 鍙戣〃璇勮
]]>
浣跨敤libcurl涓婁紶鏂囦歡鍒皊ftp鏈嶅姟鍣?/title><link>http://www.shnenglu.com/gaimor/archive/2015/08/31/211729.html</link><dc:creator>ccsdu2009</dc:creator><author>ccsdu2009</author><pubDate>Mon, 31 Aug 2015 09:21:00 GMT</pubDate><guid>http://www.shnenglu.com/gaimor/archive/2015/08/31/211729.html</guid><wfw:comment>http://www.shnenglu.com/gaimor/comments/211729.html</wfw:comment><comments>http://www.shnenglu.com/gaimor/archive/2015/08/31/211729.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/gaimor/comments/commentRss/211729.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/gaimor/services/trackbacks/211729.html</trackback:ping><description><![CDATA[<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #800000;">鏈潵鎵撶畻浣跨敤QFtp錛屽眳鐒朵笂浼犱笉鎴愬姛<br /><br />#include <stdio.h><br />#include <string.h><br />#include <curl/curl.h><br />#include <sys/types.h><br />#include <sys/stat.h><br />#include <fcntl.h><br />#include <errno.h><br />#ifdef WIN32<br />#include <io.h><br />#else<br />#include <unistd.h><br />#endif<br /><br />#define REMOTE_URL      "sftp://account:password@xx.xx.xx.xx/"<br /><br />static size_t read_callback(void *ptr, size_t size, size_t nmemb, void *stream)<br /></span><span style="color: #000000; ">{</span><span style="color: #FF0000; "><br />    curl_off_t nread;<br />    size_t retcode = fread(ptr, size, nmemb, stream);<br />    nread = (curl_off_t)retcode;<br />    fprintf(stderr, "*** We read %" CURL_FORMAT_CURL_OFF_T " bytes from file\n", nread);<br />    return retcode;<br /></span><span style="color: #000000; ">}</span><span style="color: #800000; "><br /><br />int main(int argc,char *argv[])<br /></span><span style="color: #000000; ">{</span><span style="color: #FF0000; "><br />    if(argc != 3)<br />    {<br />        printf("2 paramenters is needed.\n");<br />        return -1;<br />    </span><span style="color: #000000; ">}</span><span style="color: #800000; "><br /><br />    char* local_file = argv[1];<br />    char* remote_file = argv[2];<br /><br />    printf("call me for update -:%s,%s\n",local_file,remote_file);<br /><br />    char remoteurl[1024] = </span><span style="color: #000000; ">{</span><span style="color: #FF0000; ">0</span><span style="color: #000000; ">}</span><span style="color: #800000; ">;<br />    strcpy(remoteurl,REMOTE_URL);<br />    strcat(remoteurl,remote_file);<br /><br />    CURL* curl;<br />    CURLcode res;<br />    FILE* file;<br />    struct stat file_info;<br />    curl_off_t fsize;<br /><br />    if(stat(local_file,&file_info))<br />    </span><span style="color: #000000; ">{</span><span style="color: #FF0000; "><br />        printf("couldnt open '%s'</span><span style="color: #000000; ">:</span><span style="color: #0000FF; "> %s\n", local_file, strerror(errno))</span><span style="color: #000000; ">;</span><span style="color: #FF0000; "><br />        return 1;<br />    </span><span style="color: #000000; ">}</span><span style="color: #800000; "><br /><br />    fsize = (curl_off_t)file_info.st_size;<br />    printf("Local file size: %" CURL_FORMAT_CURL_OFF_T " bytes.\n", fsize);<br /><br />    file = fopen(local_file, "rb");<br />    curl_global_init(CURL_GLOBAL_ALL);<br /><br />    curl = curl_easy_init();<br /><br />    if(curl)<br />    </span><span style="color: #000000; ">{</span><span style="color: #FF0000; "><br />        curl_easy_setopt(curl,CURLOPT_READFUNCTION,read_callback);<br />        curl_easy_setopt(curl,CURLOPT_UPLOAD,1L);<br />        curl_easy_setopt(curl,CURLOPT_URL,remoteurl);<br />        curl_easy_setopt(curl,CURLOPT_READDATA,file);<br />        curl_easy_setopt(curl,CURLOPT_INFILESIZE_LARGE,(curl_off_t)fsize);<br />        curl_easy_setopt(curl,CURLOPT_FTP_RESPONSE_TIMEOUT,120);<br />        res = curl_easy_perform(curl);<br />        if(res != CURLE_OK)<br />            fprintf(stderr,"curl_easy_perform() failed</span><span style="color: #000000; ">:</span><span style="color: #0000FF; "> %s\n",curl_easy_strerror(res))</span><span style="color: #000000; ">;</span><span style="color: #FF0000; "><br />        curl_easy_cleanup(curl);<br />        fprintf(stderr,"finished update.");<br />    </span><span style="color: #000000; ">}</span><span style="color: #800000; "><br /><br />    fclose(file);<br />    curl_global_cleanup();<br />    return 0;<br />}<br /><br />浠ヤ笂浠g爜緇忚繃瀹為檯嫻嬭瘯.<br /></span></div><img src ="http://www.shnenglu.com/gaimor/aggbug/211729.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/gaimor/" target="_blank">ccsdu2009</a> 2015-08-31 17:21 <a href="http://www.shnenglu.com/gaimor/archive/2015/08/31/211729.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>openal涓殑alThunkhttp://www.shnenglu.com/gaimor/archive/2015/06/29/211081.htmlccsdu2009ccsdu2009Mon, 29 Jun 2015 05:24:00 GMThttp://www.shnenglu.com/gaimor/archive/2015/06/29/211081.htmlhttp://www.shnenglu.com/gaimor/comments/211081.htmlhttp://www.shnenglu.com/gaimor/archive/2015/06/29/211081.html#Feedback0http://www.shnenglu.com/gaimor/comments/commentRss/211081.htmlhttp://www.shnenglu.com/gaimor/services/trackbacks/211081.html
void alThunkInit(void);
void alThunkExit(void);
ALuint alThunkAddEntry(ALvoid 
* ptr);
void alThunkRemoveEntry(ALuint index);
ALvoid 
*alThunkLookupEntry(ALuint index);


typedef 
struct {
    ALvoid 
*ptr;
    ALboolean InUse;
} ThunkEntry;

static ThunkEntry *g_ThunkArray;
static ALuint      g_ThunkArraySize;

static CRITICAL_SECTION g_ThunkLock;

void alThunkInit(void)
{
    InitializeCriticalSection(
&g_ThunkLock);
    g_ThunkArraySize 
= 1;
    g_ThunkArray 
= calloc(1, g_ThunkArraySize * sizeof(ThunkEntry));
}

void alThunkExit(void)
{
    free(g_ThunkArray);
    g_ThunkArray 
= NULL;
    g_ThunkArraySize 
= 0;
    DeleteCriticalSection(
&g_ThunkLock);
}

ALuint alThunkAddEntry(ALvoid 
*ptr)
{
    ALuint index;

    EnterCriticalSection(
&g_ThunkLock);

    
for(index = 0;index < g_ThunkArraySize;index++)
    {
        
if(g_ThunkArray[index].InUse == AL_FALSE)
            
break;
    }

    
if(index == g_ThunkArraySize)
    {
        ThunkEntry 
*NewList;

        NewList 
= realloc(g_ThunkArray, g_ThunkArraySize*2 * sizeof(ThunkEntry));
        
if(!NewList)
        {
            LeaveCriticalSection(
&g_ThunkLock);
            
return 0;
        }
        memset(
&NewList[g_ThunkArraySize], 0, g_ThunkArraySize*sizeof(ThunkEntry));
        g_ThunkArraySize 
*= 2;
        g_ThunkArray 
= NewList;
    }

    g_ThunkArray[index].ptr 
= ptr;
    g_ThunkArray[index].InUse 
= AL_TRUE;

    LeaveCriticalSection(
&g_ThunkLock);

    
return index+1;
}

void alThunkRemoveEntry(ALuint index)
{
    EnterCriticalSection(
&g_ThunkLock);

    
if(index > 0 && index <= g_ThunkArraySize)
        g_ThunkArray[index
-1].InUse = AL_FALSE;

    LeaveCriticalSection(
&g_ThunkLock);
}

ALvoid 
*alThunkLookupEntry(ALuint index)
{
    ALvoid 
*ptr = NULL;

    EnterCriticalSection(
&g_ThunkLock);

    
if(index > 0 && index <= g_ThunkArraySize)
        ptr 
= g_ThunkArray[index-1].ptr;

    LeaveCriticalSection(
&g_ThunkLock);

    
return ptr;
}
鐢ㄩ旀瘮杈冨箍

ccsdu2009 2015-06-29 13:24 鍙戣〃璇勮
]]>
Android Animation鍜孷isible鐨勯棶棰?/title><link>http://www.shnenglu.com/gaimor/archive/2013/10/30/204006.html</link><dc:creator>ccsdu2009</dc:creator><author>ccsdu2009</author><pubDate>Wed, 30 Oct 2013 14:26:00 GMT</pubDate><guid>http://www.shnenglu.com/gaimor/archive/2013/10/30/204006.html</guid><wfw:comment>http://www.shnenglu.com/gaimor/comments/204006.html</wfw:comment><comments>http://www.shnenglu.com/gaimor/archive/2013/10/30/204006.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/gaimor/comments/commentRss/204006.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/gaimor/services/trackbacks/204006.html</trackback:ping><description><![CDATA[鍙戠幇涓涓棶棰榠mageView.startAnimation鍚姩鎺т歡鍔ㄧ敾浠ュ悗<br />鐢變簬涓浜涘師鍥犻渶瑕佽緗帶浠朵負GONE鐘舵侊紝涔熷氨鏄痠mageView.s<em>etVisibility</em>(View.GONE);<br />涔嬪悗鍙戠幇鎺т歡澶勪簬GONE鐘舵侊紝浣嗘槸鎺т歡榪樻槸鍙鐨?br />涓婄綉鏌ヤ簡涓嬪彂鐜拌娓呯┖鍔ㄧ敾錛屼篃灝辨槸imageView.clearAnimation<br /><br />鍏跺疄鎴戣寰楀鏋滆皟鐢╯etVisibility(View.GONE)涔嬪悗鏃犺褰撳墠鏈夋棤鍔ㄧ敾閮藉簲璇ユ秷澶?br />璁劇疆涓篏ONE鐘舵佸悗鎺т歡鐘舵佸嚭鐜板紓甯?br /><br />鎸夌収褰撳墠鎯呭喌瑕侀殣钘忔帶浠墮渶瑕佸厛璋冪敤cleanAnimation,涔嬪悗call setVisibility<br />鎵浠ユ湁絀烘兂鎯砤ndroid API涔熷茍闈炲崄鍏ㄥ崄緹?<br />鍚勪綅瑙夊緱鍛紵<img src ="http://www.shnenglu.com/gaimor/aggbug/204006.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/gaimor/" target="_blank">ccsdu2009</a> 2013-10-30 22:26 <a href="http://www.shnenglu.com/gaimor/archive/2013/10/30/204006.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>C#浣跨敤c璇█緙栧啓dll鐨勪緥瀛?/title><link>http://www.shnenglu.com/gaimor/archive/2013/09/13/203225.html</link><dc:creator>ccsdu2009</dc:creator><author>ccsdu2009</author><pubDate>Fri, 13 Sep 2013 12:55:00 GMT</pubDate><guid>http://www.shnenglu.com/gaimor/archive/2013/09/13/203225.html</guid><wfw:comment>http://www.shnenglu.com/gaimor/comments/203225.html</wfw:comment><comments>http://www.shnenglu.com/gaimor/archive/2013/09/13/203225.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/gaimor/comments/commentRss/203225.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/gaimor/services/trackbacks/203225.html</trackback:ping><description><![CDATA[     鎽樿: 涔嬪墠鍐欎簡涓涓猟ll錛屽叿浣撳湪榪欓噷http://www.shnenglu.com/gaimor/anarchive/2013/07/11/201711.html鐜板湪鎯沖鍔犱竴涓猚#緇戝畾,涓婄綉鎼滀簡涓嬪緢綆鍗曞氨瀹炵幇浜嗗疄鐜板悗鐨刢s浠g爜濡備笅(褰撳墠鍙疄鐜頒簡涓閮ㄥ垎):Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.Co...  <a href='http://www.shnenglu.com/gaimor/archive/2013/09/13/203225.html'>闃呰鍏ㄦ枃</a><img src ="http://www.shnenglu.com/gaimor/aggbug/203225.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/gaimor/" target="_blank">ccsdu2009</a> 2013-09-13 20:55 <a href="http://www.shnenglu.com/gaimor/archive/2013/09/13/203225.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>鑷繁鍐欑殑涓涓祦璇誨彇搴?/title><link>http://www.shnenglu.com/gaimor/archive/2013/04/09/199287.html</link><dc:creator>ccsdu2009</dc:creator><author>ccsdu2009</author><pubDate>Tue, 09 Apr 2013 12:56:00 GMT</pubDate><guid>http://www.shnenglu.com/gaimor/archive/2013/04/09/199287.html</guid><wfw:comment>http://www.shnenglu.com/gaimor/comments/199287.html</wfw:comment><comments>http://www.shnenglu.com/gaimor/archive/2013/04/09/199287.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/gaimor/comments/commentRss/199287.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/gaimor/services/trackbacks/199287.html</trackback:ping><description><![CDATA[<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">#ifndef STREAM_BUFFER_H<br /></span><span style="color: #0000FF; ">#define</span><span style="color: #000000; "> STREAM_BUFFER_H</span><span style="color: #000000; "><br />#include </span><span style="color: #000000; "><</span><span style="color: #000000; ">stdio.h</span><span style="color: #000000; ">></span><span style="color: #000000; "><br />#include </span><span style="color: #000000; "><</span><span style="color: #000000; ">stdlib.h</span><span style="color: #000000; ">></span><span style="color: #000000; "><br />#include </span><span style="color: #000000; ">"</span><span style="color: #000000; ">gaudio.h</span><span style="color: #000000; ">"</span><span style="color: #000000; "><br /><br />typedef </span><span style="color: #0000FF; ">struct</span><span style="color: #000000; "> _streamBuffer streamBuffer;<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">typedef size_t(*streamRead)(void* ctx,void* ptr,size_t size,size_t nmemb);<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">typedef int(*streamSeek)(void* ctx,glong offset,int flag);<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">typedef int(*streamClose)(void* ctx);</span><span style="color: #008000; "><br /></span><span style="color: #000000; "><br />streamBuffer</span><span style="color: #000000; ">*</span><span style="color: #000000; "> stream_open_file(</span><span style="color: #0000FF; ">const</span><span style="color: #000000; "> gchar</span><span style="color: #000000; ">*</span><span style="color: #000000; "> file);<br />streamBuffer</span><span style="color: #000000; ">*</span><span style="color: #000000; "> stream_open_mem(gvoid</span><span style="color: #000000; ">*</span><span style="color: #000000; "> mem,gulong size);<br />streamBuffer</span><span style="color: #000000; ">*</span><span style="color: #000000; "> stream_open_callbacks(gread read,gseek seek,gtell tell,gclose close,gvoid</span><span style="color: #000000; ">*</span><span style="color: #000000; "> context);<br />glong         stream_read(streamBuffer</span><span style="color: #000000; ">*</span><span style="color: #000000; "> stream,gvoid</span><span style="color: #000000; ">*</span><span style="color: #000000; "> ptr,gint size,glong nmemb);<br />glong         stream_seek(streamBuffer</span><span style="color: #000000; ">*</span><span style="color: #000000; "> stream,glong offset,gint flag);<br />glong         stream_close(streamBuffer</span><span style="color: #000000; ">*</span><span style="color: #000000; "> stream);<br /><br /></span><span style="color: #0000FF; ">#endif</span><span style="color: #000000; "><br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">! by ccsdu2004<br /><br /></span><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">#include </span><span style="color: #000000; "><</span><span style="color: #000000; ">stdio.h</span><span style="color: #000000; ">></span><span style="color: #000000; "><br />#include </span><span style="color: #000000; "><</span><span style="color: #0000FF; ">string</span><span style="color: #000000; ">.h</span><span style="color: #000000; ">></span><span style="color: #000000; "><br />#include </span><span style="color: #000000; ">"</span><span style="color: #000000; ">streamBuffer.h</span><span style="color: #000000; ">"</span><span style="color: #000000; "><br />#include </span><span style="color: #000000; ">"</span><span style="color: #000000; ">gmemory.h</span><span style="color: #000000; ">"</span><span style="color: #000000; "><br /><br /></span><span style="color: #0000FF; ">struct</span><span style="color: #000000; "> _streamBuffer<br />{<br />    gread  read;<br />    gseek  seek;<br />    gclose close;<br />    gtell  tell;<br />    </span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">*</span><span style="color: #000000; ">  ctx;<br />};<br /><br />typedef </span><span style="color: #0000FF; ">struct</span><span style="color: #000000; "> _stdIOContext<br />{<br />    FILE </span><span style="color: #000000; ">*</span><span style="color: #000000; ">fp;<br />}stdIOContext;<br /><br />glong stdio_stream_read(gvoid</span><span style="color: #000000; ">*</span><span style="color: #000000; "> ptr,gint size,glong nmemb,gvoid</span><span style="color: #000000; ">*</span><span style="color: #000000; "> ctx)<br />{<br />    </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> fread(ptr,size,nmemb,((stdIOContext</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)ctx)</span><span style="color: #000000; ">-></span><span style="color: #000000; ">fp);<br />}<br /><br />glong stdio_stream_seek(gvoid</span><span style="color: #000000; ">*</span><span style="color: #000000; "> ctx,glong offset,gint flag)<br />{<br />    </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> fseek(((stdIOContext</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)ctx)</span><span style="color: #000000; ">-></span><span style="color: #000000; ">fp,offset,flag);<br />}<br /><br />glong APIENTRY stdio_stream_tell(gvoid</span><span style="color: #000000; ">*</span><span style="color: #000000; "> ctx)<br />{<br />    </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> ftell(((stdIOContext</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)ctx)</span><span style="color: #000000; ">-></span><span style="color: #000000; ">fp);<br />}<br /><br />glong stdio_stream_close(gvoid</span><span style="color: #000000; ">*</span><span style="color: #000000; "> ptr)<br />{<br />    stdIOContext</span><span style="color: #000000; ">*</span><span style="color: #000000; "> ctx </span><span style="color: #000000; ">=</span><span style="color: #000000; "> (stdIOContext</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)ptr;<br />    gint ret </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />    ret </span><span style="color: #000000; ">=</span><span style="color: #000000; "> fclose(ctx</span><span style="color: #000000; ">-></span><span style="color: #000000; ">fp);<br />    gFreeBuffer(ctx);<br />    </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> ret;<br />}<br /><br />typedef </span><span style="color: #0000FF; ">struct</span><span style="color: #000000; "> memContext<br />{<br />    guchar</span><span style="color: #000000; ">*</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">base</span><span style="color: #000000; ">;<br />    guchar</span><span style="color: #000000; ">*</span><span style="color: #000000; "> current;<br />    guchar</span><span style="color: #000000; ">*</span><span style="color: #000000; "> end;<br />}memContext;<br /><br />glong mem_stream_read(gvoid</span><span style="color: #000000; ">*</span><span style="color: #000000; "> ptr,gint size,glong nmemb,gvoid</span><span style="color: #000000; ">*</span><span style="color: #000000; "> ctx)<br />{<br />    streamBuffer</span><span style="color: #000000; ">*</span><span style="color: #000000; "> stream </span><span style="color: #000000; ">=</span><span style="color: #000000; "> (streamBuffer</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)ctx;<br />    memContext </span><span style="color: #000000; ">*</span><span style="color: #000000; ">c;<br />    glong count;<br /><br />    c </span><span style="color: #000000; ">=</span><span style="color: #000000; "> (memContext</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)stream;<br />    count </span><span style="color: #000000; ">=</span><span style="color: #000000; "> nmemb;<br /><br />    </span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(c</span><span style="color: #000000; ">-></span><span style="color: #000000; ">current </span><span style="color: #000000; ">+</span><span style="color: #000000; "> count </span><span style="color: #000000; ">*</span><span style="color: #000000; "> size </span><span style="color: #000000; ">></span><span style="color: #000000; "> c</span><span style="color: #000000; ">-></span><span style="color: #000000; ">end)<br />        count </span><span style="color: #000000; ">=</span><span style="color: #000000; "> (c</span><span style="color: #000000; ">-></span><span style="color: #000000; ">end </span><span style="color: #000000; ">-</span><span style="color: #000000; "> c</span><span style="color: #000000; ">-></span><span style="color: #000000; ">current) </span><span style="color: #000000; ">/</span><span style="color: #000000; "> size;<br /><br />    memcpy(ptr, c</span><span style="color: #000000; ">-></span><span style="color: #000000; ">current, count </span><span style="color: #000000; ">*</span><span style="color: #000000; "> size);<br />    c</span><span style="color: #000000; ">-></span><span style="color: #000000; ">current </span><span style="color: #000000; ">+=</span><span style="color: #000000; "> count </span><span style="color: #000000; ">*</span><span style="color: #000000; "> size;<br />    </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> count;<br />}<br /><br />glong mem_stream_seek(gvoid</span><span style="color: #000000; ">*</span><span style="color: #000000; "> ctx,glong offset,gint flag)<br />{<br />    streamBuffer</span><span style="color: #000000; ">*</span><span style="color: #000000; "> stream </span><span style="color: #000000; ">=</span><span style="color: #000000; "> (streamBuffer</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)ctx;<br />    memContext</span><span style="color: #000000; ">*</span><span style="color: #000000; "> c;<br />    c </span><span style="color: #000000; ">=</span><span style="color: #000000; "> (memContext</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)stream;<br />    </span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(c </span><span style="color: #000000; ">==</span><span style="color: #000000; "> NULL)<br />        </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> </span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />    </span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(flag </span><span style="color: #000000; ">==</span><span style="color: #000000; "> SEEK_SET)<br />    {<br />        </span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(offset </span><span style="color: #000000; "><</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; "> </span><span style="color: #000000; ">||</span><span style="color: #000000; "> offset </span><span style="color: #000000; ">></span><span style="color: #000000; "> c</span><span style="color: #000000; ">-></span><span style="color: #000000; ">end </span><span style="color: #000000; ">-</span><span style="color: #000000; "> c</span><span style="color: #000000; ">-></span><span style="color: #0000FF; ">base</span><span style="color: #000000; ">)<br />            </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> </span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />        c</span><span style="color: #000000; ">-></span><span style="color: #000000; ">current </span><span style="color: #000000; ">=</span><span style="color: #000000; "> c</span><span style="color: #000000; ">-></span><span style="color: #0000FF; ">base</span><span style="color: #000000; "> </span><span style="color: #000000; ">+</span><span style="color: #000000; "> offset;<br />        </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />    }<br />    </span><span style="color: #0000FF; ">else</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(flag </span><span style="color: #000000; ">==</span><span style="color: #000000; "> SEEK_CUR)<br />    {<br />        </span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(offset </span><span style="color: #000000; ">></span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />        {<br />            </span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(offset </span><span style="color: #000000; ">></span><span style="color: #000000; "> c</span><span style="color: #000000; ">-></span><span style="color: #000000; ">end </span><span style="color: #000000; ">-</span><span style="color: #000000; "> c</span><span style="color: #000000; ">-></span><span style="color: #000000; ">current)<br />                </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> </span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />            c</span><span style="color: #000000; ">-></span><span style="color: #000000; ">current </span><span style="color: #000000; ">+=</span><span style="color: #000000; "> offset;<br />            </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />        }<br />        </span><span style="color: #0000FF; ">else</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(offset </span><span style="color: #000000; "><</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />        {<br />            </span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(</span><span style="color: #000000; ">-</span><span style="color: #000000; ">offset </span><span style="color: #000000; ">></span><span style="color: #000000; "> c</span><span style="color: #000000; ">-></span><span style="color: #000000; ">current </span><span style="color: #000000; ">-</span><span style="color: #000000; "> c</span><span style="color: #000000; ">-></span><span style="color: #0000FF; ">base</span><span style="color: #000000; ">)<br />                </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> </span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />            c</span><span style="color: #000000; ">-></span><span style="color: #000000; ">current </span><span style="color: #000000; ">+=</span><span style="color: #000000; "> offset;<br />            </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />        }<br />    }<br />    </span><span style="color: #0000FF; ">else</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(flag </span><span style="color: #000000; ">==</span><span style="color: #000000; "> SEEK_END)<br />    {<br />        </span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(offset </span><span style="color: #000000; ">></span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; "> </span><span style="color: #000000; ">||</span><span style="color: #000000; "> offset </span><span style="color: #000000; ">></span><span style="color: #000000; "> c</span><span style="color: #000000; ">-></span><span style="color: #000000; ">end </span><span style="color: #000000; ">-</span><span style="color: #000000; "> c</span><span style="color: #000000; ">-></span><span style="color: #0000FF; ">base</span><span style="color: #000000; ">)<br />            </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> </span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />        c</span><span style="color: #000000; ">-></span><span style="color: #000000; ">current </span><span style="color: #000000; ">=</span><span style="color: #000000; "> c</span><span style="color: #000000; ">-></span><span style="color: #000000; ">end </span><span style="color: #000000; ">-</span><span style="color: #000000; "> offset;<br />        </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />    }<br />    </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> </span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />}<br /><br />glong mem_stream_close(gvoid </span><span style="color: #000000; ">*</span><span style="color: #000000; ">ptr)<br />{<br />    memContext</span><span style="color: #000000; ">*</span><span style="color: #000000; "> ctx </span><span style="color: #000000; ">=</span><span style="color: #000000; "> (memContext</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)ptr;<br />    gFreeBuffer(ctx</span><span style="color: #000000; ">-></span><span style="color: #0000FF; ">base</span><span style="color: #000000; ">);<br />    gFreeBuffer(ctx);<br />    </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />}<br /><br />streamBuffer</span><span style="color: #000000; ">*</span><span style="color: #000000; "> stream_open_fp(FILE</span><span style="color: #000000; ">*</span><span style="color: #000000; "> fp)<br />{<br />    stdIOContext</span><span style="color: #000000; ">*</span><span style="color: #000000; "> ctx;<br />    streamBuffer</span><span style="color: #000000; ">*</span><span style="color: #000000; "> stream;<br /><br />    stream </span><span style="color: #000000; ">=</span><span style="color: #000000; "> gcreate_buffer</span><span style="color: #000000; "><</span><span style="color: #000000; ">streamBuffer</span><span style="color: #000000; ">></span><span style="color: #000000; ">(</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br />    </span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(stream </span><span style="color: #000000; ">==</span><span style="color: #000000; "> NULL)<br />        </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> NULL;<br /><br />    ctx </span><span style="color: #000000; ">=</span><span style="color: #000000; "> gcreate_buffer</span><span style="color: #000000; "><</span><span style="color: #000000; ">stdIOContext</span><span style="color: #000000; ">></span><span style="color: #000000; ">(</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br />    </span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(ctx </span><span style="color: #000000; ">==</span><span style="color: #000000; "> NULL)<br />    {<br />        gFreeBuffer(stream);<br />        </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> NULL;<br />    }<br /><br />    ctx</span><span style="color: #000000; ">-></span><span style="color: #000000; ">fp </span><span style="color: #000000; ">=</span><span style="color: #000000; "> fp;<br />    stream</span><span style="color: #000000; ">-></span><span style="color: #000000; ">ctx </span><span style="color: #000000; ">=</span><span style="color: #000000; "> ctx;<br />    stream</span><span style="color: #000000; ">-></span><span style="color: #000000; ">read </span><span style="color: #000000; ">=</span><span style="color: #000000; "> stdio_stream_read;<br />    stream</span><span style="color: #000000; ">-></span><span style="color: #000000; ">seek </span><span style="color: #000000; ">=</span><span style="color: #000000; "> stdio_stream_seek;<br />    stream</span><span style="color: #000000; ">-></span><span style="color: #000000; ">close </span><span style="color: #000000; ">=</span><span style="color: #000000; "> stdio_stream_close;<br />    </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> stream;<br />}<br /><br />streamBuffer</span><span style="color: #000000; ">*</span><span style="color: #000000; "> stream_open_file(</span><span style="color: #0000FF; ">const</span><span style="color: #000000; "> gchar </span><span style="color: #000000; ">*</span><span style="color: #000000; ">file)<br />{<br />    FILE </span><span style="color: #000000; ">*</span><span style="color: #000000; ">fp;<br />    fp </span><span style="color: #000000; ">=</span><span style="color: #000000; "> fopen((</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)file,</span><span style="color: #000000; ">"</span><span style="color: #000000; ">rb</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />    </span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(fp </span><span style="color: #000000; ">==</span><span style="color: #000000; "> NULL)<br />       </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> NULL;<br />    </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> stream_open_fp(fp);<br />}<br /><br />streamBuffer</span><span style="color: #000000; ">*</span><span style="color: #000000; "> stream_open_mem(gvoid</span><span style="color: #000000; ">*</span><span style="color: #000000; "> mem,gulong size)<br />{<br />    memContext</span><span style="color: #000000; ">*</span><span style="color: #000000; ">   ctx;<br />    streamBuffer</span><span style="color: #000000; ">*</span><span style="color: #000000; "> stream;<br /><br />    stream </span><span style="color: #000000; ">=</span><span style="color: #000000; "> gcreate_buffer</span><span style="color: #000000; "><</span><span style="color: #000000; ">streamBuffer</span><span style="color: #000000; ">></span><span style="color: #000000; ">(</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br />    </span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(stream </span><span style="color: #000000; ">==</span><span style="color: #000000; "> NULL)<br />        </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> NULL;<br /><br />    ctx </span><span style="color: #000000; ">=</span><span style="color: #000000; "> gcreate_buffer</span><span style="color: #000000; "><</span><span style="color: #000000; ">memContext</span><span style="color: #000000; ">></span><span style="color: #000000; ">(</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br />    </span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(ctx </span><span style="color: #000000; ">==</span><span style="color: #000000; "> NULL)<br />    {<br />        gFreeBuffer(stream);<br />        </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> NULL;<br />    }<br /><br />    ctx</span><span style="color: #000000; ">-></span><span style="color: #0000FF; ">base</span><span style="color: #000000; "> </span><span style="color: #000000; ">=</span><span style="color: #000000; "> (guchar</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)mem;<br />    ctx</span><span style="color: #000000; ">-></span><span style="color: #000000; ">current </span><span style="color: #000000; ">=</span><span style="color: #000000; "> (guchar</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)mem;<br />    ctx</span><span style="color: #000000; ">-></span><span style="color: #000000; ">end </span><span style="color: #000000; ">=</span><span style="color: #000000; "> ((guchar</span><span style="color: #000000; ">*</span><span style="color: #000000; ">) mem) </span><span style="color: #000000; ">+</span><span style="color: #000000; "> size;<br /><br />    stream</span><span style="color: #000000; ">-></span><span style="color: #000000; ">ctx </span><span style="color: #000000; ">=</span><span style="color: #000000; "> ctx;<br />    stream</span><span style="color: #000000; ">-></span><span style="color: #000000; ">read </span><span style="color: #000000; ">=</span><span style="color: #000000; "> mem_stream_read;<br />    stream</span><span style="color: #000000; ">-></span><span style="color: #000000; ">seek </span><span style="color: #000000; ">=</span><span style="color: #000000; "> mem_stream_seek;<br />    stream</span><span style="color: #000000; ">-></span><span style="color: #000000; ">close </span><span style="color: #000000; ">=</span><span style="color: #000000; "> mem_stream_close;<br /><br />    </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> stream;<br />}<br /><br />streamBuffer</span><span style="color: #000000; ">*</span><span style="color: #000000; "> stream_open_callbacks(gread read,gseek seek,gtell tell,gclose close,gvoid</span><span style="color: #000000; ">*</span><span style="color: #000000; "> context)<br />{<br />    streamBuffer</span><span style="color: #000000; ">*</span><span style="color: #000000; "> stream </span><span style="color: #000000; ">=</span><span style="color: #000000; "> gcreate_buffer</span><span style="color: #000000; "><</span><span style="color: #000000; ">streamBuffer</span><span style="color: #000000; ">></span><span style="color: #000000; ">(</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br />    </span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(stream </span><span style="color: #000000; ">==</span><span style="color: #000000; "> NULL)<br />       </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> NULL;<br /><br />    stream</span><span style="color: #000000; ">-></span><span style="color: #000000; ">ctx </span><span style="color: #000000; ">=</span><span style="color: #000000; "> context;<br />    stream</span><span style="color: #000000; ">-></span><span style="color: #000000; ">read </span><span style="color: #000000; ">=</span><span style="color: #000000; "> read;<br />    stream</span><span style="color: #000000; ">-></span><span style="color: #000000; ">seek </span><span style="color: #000000; ">=</span><span style="color: #000000; "> seek;<br />    stream</span><span style="color: #000000; ">-></span><span style="color: #000000; ">tell </span><span style="color: #000000; ">=</span><span style="color: #000000; "> tell;<br />    stream</span><span style="color: #000000; ">-></span><span style="color: #000000; ">close </span><span style="color: #000000; ">=</span><span style="color: #000000; "> close;<br />    </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> stream;<br />}<br /><br />glong stream_read(streamBuffer</span><span style="color: #000000; ">*</span><span style="color: #000000; "> stream,gvoid</span><span style="color: #000000; ">*</span><span style="color: #000000; "> ptr,gint size,glong nmemb)<br />{<br />    </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> stream</span><span style="color: #000000; ">-></span><span style="color: #000000; ">read(ptr,size,nmemb,stream</span><span style="color: #000000; ">-></span><span style="color: #000000; ">ctx);<br />}<br /><br />glong stream_seek(streamBuffer</span><span style="color: #000000; ">*</span><span style="color: #000000; "> stream,glong offset,gint flag)<br />{<br />    </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> stream</span><span style="color: #000000; ">-></span><span style="color: #000000; ">seek(stream,offset,flag);<br />    </span><span style="color: #008000; ">/*</span><span style="color: #008000; ">size_t c;<br />    char tmp[1024];<br />    while(offset > 0)<br />    {<br />        c = offset;<br />        if(c > 1024)<br />           c = 1024;<br />        offset -= c;<br /><br />        if(c != stream_read(stream,tmp,1,c))<br />        {<br />        }<br />    }<br />    return 1;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />}<br /><br />glong stream_close(streamBuffer</span><span style="color: #000000; ">*</span><span style="color: #000000; "> stream)<br />{<br />    gint ret </span><span style="color: #000000; ">=</span><span style="color: #000000; "> stream</span><span style="color: #000000; ">-></span><span style="color: #000000; ">close(stream</span><span style="color: #000000; ">-></span><span style="color: #000000; ">ctx);<br />    gFreeBuffer(stream);<br />    </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> ret;<br />}</span></div></div><img src ="http://www.shnenglu.com/gaimor/aggbug/199287.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/gaimor/" target="_blank">ccsdu2009</a> 2013-04-09 20:56 <a href="http://www.shnenglu.com/gaimor/archive/2013/04/09/199287.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>c璇█璋冪敤Python鑴氭湰-2http://www.shnenglu.com/gaimor/archive/2013/01/15/197300.htmlccsdu2009ccsdu2009Tue, 15 Jan 2013 13:39:00 GMThttp://www.shnenglu.com/gaimor/archive/2013/01/15/197300.htmlhttp://www.shnenglu.com/gaimor/comments/197300.htmlhttp://www.shnenglu.com/gaimor/archive/2013/01/15/197300.html#Feedback0http://www.shnenglu.com/gaimor/comments/commentRss/197300.htmlhttp://www.shnenglu.com/gaimor/services/trackbacks/197300.html
call.py
def test():
    
print 'hello world'


def add(a,b):
    
return a + b

api.py
import io

def load_test():
    fp 
= open('call.py','r')
    buffer 
= ''
    
if fp:
        buffer 
= fp.read()
    fp.close()
    
return buffer

cpp浠g爜:
#include <stdio.h>
#include 
<stdlib.h>
#include 
<Python.h>

int main(int argc, char *argv[])
{
    Py_Initialize();  
    
if(!Py_IsInitialized())   
    {  
        
return -1;  
    }  
    
    PyRun_SimpleString(
"import sys");
    PyRun_SimpleString(
"sys.path.append('./')");
    PyObject
* pName;
    PyObject
* pModule;
    PyObject
* pDict;
    PyObject
* pFunc;
    
    pName 
= PyString_FromString("api");
    pModule 
= PyImport_Import(pName);
    
if(!pModule)
    {
        printf(
"can't find call.py");
        getchar();
        
return -1;
    }
    
    pDict 
= PyModule_GetDict(pModule);
    
if(!pDict)
    {
        
return -1;
    }
    
    {
        pFunc 
= PyDict_GetItemString(pDict,"load_test");
        
if(!pFunc || !PyCallable_Check(pFunc))
        {
            printf(
"can't find function [test]");
            getchar();
            
return -1;
        }
        
        PyObject 
*pFn = PyObject_CallObject(pFunc,0);
        
char* buffer = PyString_AsString(pFn);
        printf(
"%s\n",buffer);
        
        PyObject
* o = Py_CompileString(buffer,"none",Py_file_input);
        PyObject
* m = PyImport_ExecCodeModule("a.a",o);
        PyObject
* d = PyModule_GetDict(m);
        pFunc 
= PyDict_GetItemString(d,"add");
        
if(!pFunc || !PyCallable_Check(pFunc))
        {
            printf(
"can't find function [add]");
            getchar();
            
return -1;
        }
        
        PyObject
* args = PyTuple_New(2);
        PyTuple_SetItem(args,
0,Py_BuildValue("l",3));
        PyTuple_SetItem(args,
1,Py_BuildValue("l",4));
        PyObject 
*pAdded = PyObject_CallObject(pFunc,args);
        
int ret = PyInt_AsLong(pAdded);  
        printf(
"add value:%d\n",ret);    
    }
 
    Py_Finalize();    
    system(
"PAUSE");    
    
return 0;
}

榪欐浠g爜鍜屼笂涓綃囨湁鐐瑰尯鍒?br />涓昏鍖哄埆鏄粠浠庡唴瀛樿澆鍏ython妯″潡鐒跺悗璋冪敤鍑芥暟
涓昏閮ㄥ垎鏄繖鍧?
        PyObject* o = Py_CompileString(buffer,"none",Py_file_input);
        PyObject* m = PyImport_ExecCodeModule("a.a",o);
        PyObject* d = PyModule_GetDict(m);
buffer鏄痯ython婧愮爜瀛楃涓?br />
鍦╬ython2.7涓墽琛屾甯?br />


ccsdu2009 2013-01-15 21:39 鍙戣〃璇勮
]]>
伊人久久精品影院| 武侠古典久久婷婷狼人伊人| 久久久无码精品亚洲日韩蜜臀浪潮 | 狠狠综合久久AV一区二区三区| 久久久黄片| 久久精品亚洲精品国产欧美| 久久久久四虎国产精品| 久久国产高清字幕中文| 97精品伊人久久大香线蕉app | 亚洲国产成人精品91久久久| 国产精品欧美久久久久无广告| 国产福利电影一区二区三区久久久久成人精品综合 | 精品国产乱码久久久久久人妻 | 四虎国产精品免费久久5151| 久久精品国产91久久综合麻豆自制| 国产成人精品白浆久久69| 免费精品99久久国产综合精品 | 91精品国产91久久久久久蜜臀| 久久精品成人免费看| 精品久久久久久无码国产| 久久97久久97精品免视看| 久久中文字幕视频、最近更新| 久久综合给合综合久久| 久久成人小视频| 久久精品国产久精国产思思| 精品国产福利久久久| 久久久久久极精品久久久| 2021国产精品久久精品| 99久久无码一区人妻a黑| 色综合色天天久久婷婷基地| 思思久久99热只有频精品66| 日韩久久久久久中文人妻 | 久久精品国产99国产精偷| 国产2021久久精品| 波多野结衣久久| 91精品国产乱码久久久久久 | 精品国产VA久久久久久久冰| 国产成人久久精品麻豆一区| 亚洲午夜无码久久久久小说| 久久国产精品无码一区二区三区| 国产午夜福利精品久久|