﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-Cpper-随笔分类-编程基础</title><link>http://www.cppblog.com/gaimor/category/20054.html</link><description>C/C++高级工程师
Android高级软件工程师
IT集成工程师
音频工程师
熟悉c,c++,java,c#,py,js,asp等多种语言
程序猿</description><language>zh-cn</language><lastBuildDate>Tue, 18 Jun 2019 09:23:11 GMT</lastBuildDate><pubDate>Tue, 18 Jun 2019 09:23:11 GMT</pubDate><ttl>60</ttl><item><title>六边形格子地图坐标计算</title><link>http://www.cppblog.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.cppblog.com/gaimor/archive/2019/06/18/216419.html</guid><wfw:comment>http://www.cppblog.com/gaimor/comments/216419.html</wfw:comment><comments>http://www.cppblog.com/gaimor/archive/2019/06/18/216419.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/gaimor/comments/commentRss/216419.html</wfw:commentRss><trackback:ping>http://www.cppblog.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.cppblog.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&nbsp;GridCell6Manager::getWorldPosByCellCoordinate(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;x,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;y)<br />
<br />
{<br />
<br />
</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(x&nbsp;</span><span style="color: #000000; ">%</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">2</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />
<br />
</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;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; ">&nbsp;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&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">),<br />
<br />
(R3&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;y&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;R3)</span><span style="color: #000000; ">*</span><span style="color: #000000; ">res);<br />
<br />
}<br />
<br />
<br />
<br />
QPoint&nbsp;GridCell6Manager::getCellCoordinateByWorldPos(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;x,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;y)<br />
<br />
{<br />
<br />
QPoint&nbsp;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; ">&nbsp;xpos&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;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; ">&nbsp;ypos&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;y</span><span style="color: #000000; ">/</span><span style="color: #000000; ">(R3</span><span style="color: #000000; ">*</span><span style="color: #000000; ">res)&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;</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; ">&nbsp;yset[</span><span style="color: #000000; ">2</span><span style="color: #000000; ">]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;{std::floorf(ypos),std::ceilf(ypos)};<br />
<br />
xpos&nbsp;</span><span style="color: #000000; ">/=</span><span style="color: #000000; ">&nbsp;(</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; ">&nbsp;xset[</span><span style="color: #000000; ">2</span><span style="color: #000000; ">]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;{&nbsp;std::floorf(xpos),std::ceilf(xpos)};<br />
<br />
auto&nbsp;p00&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;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&nbsp;p01&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;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&nbsp;p10&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;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&nbsp;p11&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;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; ">&nbsp;d00&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;distance2</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">float</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">(x,y,p00.x(),p00.y());<br />
<br />
</span><span style="color: #0000FF; ">float</span><span style="color: #000000; ">&nbsp;d01&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;distance2</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">float</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">(x,y,p01.x(),p01.y());<br />
<br />
</span><span style="color: #0000FF; ">float</span><span style="color: #000000; ">&nbsp;d10&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;distance2</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">float</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">(x,y,p10.x(),p10.y());<br />
<br />
</span><span style="color: #0000FF; ">float</span><span style="color: #000000; ">&nbsp;d11&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;distance2</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">float</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">(x,y,p11.x(),p11.y());<br />
<br />
</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i,j;<br />
<br />
</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(d00&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;d01&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;d00&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;d10&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;d00&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;d11)<br />
<br />
{<br />
<br />
i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;xset[</span><span style="color: #000000; ">0</span><span style="color: #000000; ">];<br />
<br />
j&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;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; ">&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(d00&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;d01&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;d01&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;d10&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;d01&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;d11)<br />
<br />
{<br />
<br />
i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;xset[</span><span style="color: #000000; ">0</span><span style="color: #000000; ">];<br />
<br />
j&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;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; ">&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(d10&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;d00&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;d10&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;d01&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;d10&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;d11)<br />
<br />
{<br />
<br />
i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;xset[</span><span style="color: #000000; ">1</span><span style="color: #000000; ">];<br />
<br />
j&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;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&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;xset[</span><span style="color: #000000; ">1</span><span style="color: #000000; ">];<br />
<br />
j&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;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; ">&nbsp;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为sqrt(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.cppblog.com/gaimor/aggbug/216419.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/gaimor/" target="_blank">ccsdu2009</a> 2019-06-18 09:35 <a href="http://www.cppblog.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.cppblog.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.cppblog.com/gaimor/archive/2019/03/14/216297.html</guid><wfw:comment>http://www.cppblog.com/gaimor/comments/216297.html</wfw:comment><comments>http://www.cppblog.com/gaimor/archive/2019/03/14/216297.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/gaimor/comments/commentRss/216297.html</wfw:commentRss><trackback:ping>http://www.cppblog.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&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">Windows.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;<br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">wininet.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;<br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">stdio.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;<br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">string</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;<br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">io.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /><br /></span><span style="color: #0000FF; ">using</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">namespace</span><span style="color: #000000; ">&nbsp;std;<br /><br />#pragma&nbsp;comment(lib,&nbsp;</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; ">&nbsp;DWORD&nbsp;DWORD_MAX_CCH_OF_TEST_URL&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">256</span><span style="color: #000000; ">;<br /></span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;DWORD&nbsp;DWORD_MAX_CCH_OF_HOST_NAME&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">128</span><span style="color: #000000; ">;<br /></span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;DWORD&nbsp;DWORD_MAX_CCH_OF_URL_PATH&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">256</span><span style="color: #000000; ">;<br /><br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;breakpointDownload(</span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;std::wstring</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">&nbsp;url,&nbsp;</span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;std::wstring</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">&nbsp;folder,&nbsp;</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; ">&amp;</span><span style="color: #000000; ">&nbsp;name)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;index&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;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 />&nbsp;&nbsp;&nbsp;&nbsp;std::wstring&nbsp;filename&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;url.substr(index&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;index&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;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 />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(index&nbsp;</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">&nbsp;std::wstring::npos)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;filename&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;filename.substr(</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,index);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #000000; ">!</span><span style="color: #000000; ">folder.empty())<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;filename&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;folder&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;L</span><span style="color: #000000; ">"</span><span style="color: #000000; ">\\</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;filename;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;std::wstring&nbsp;tempfile&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;filename&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;L</span><span style="color: #000000; ">"</span><span style="color: #000000; ">.dl</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;_wremove(filename.c_str());<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;HINTERNET&nbsp;hInetOpen&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;NULL;<br />&nbsp;&nbsp;&nbsp;&nbsp;HINTERNET&nbsp;hInetConnect&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;NULL;<br />&nbsp;&nbsp;&nbsp;&nbsp;HINTERNET&nbsp;hInetRequest&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;NULL;<br />&nbsp;&nbsp;&nbsp;&nbsp;HANDLE&nbsp;lhFile&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;NULL;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;URL_COMPONENTS&nbsp;ldCrackedURL;<br />&nbsp;&nbsp;&nbsp;&nbsp;ZeroMemory(</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">ldCrackedURL,&nbsp;</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(URL_COMPONENTS));<br />&nbsp;&nbsp;&nbsp;&nbsp;ldCrackedURL.dwStructSize&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(URL_COMPONENTS);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;TCHAR&nbsp;szHostName[DWORD_MAX_CCH_OF_HOST_NAME]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;{&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">&nbsp;};<br />&nbsp;&nbsp;&nbsp;&nbsp;ldCrackedURL.lpszHostName&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;szHostName;<br />&nbsp;&nbsp;&nbsp;&nbsp;ldCrackedURL.dwHostNameLength&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;DWORD_MAX_CCH_OF_HOST_NAME;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;wchar_t&nbsp;szUrlPath[DWORD_MAX_CCH_OF_URL_PATH]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;{&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">&nbsp;};<br />&nbsp;&nbsp;&nbsp;&nbsp;ldCrackedURL.lpszUrlPath&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;szUrlPath;<br />&nbsp;&nbsp;&nbsp;&nbsp;ldCrackedURL.dwUrlPathLength&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;DWORD_MAX_CCH_OF_URL_PATH;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(FALSE&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;InternetCrackUrl(url.c_str(),url.size(),&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">ldCrackedURL))<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;hInetOpen&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;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; ">,&nbsp;INTERNET_OPEN_TYPE_PRECONFIG,&nbsp;NULL,&nbsp;NULL,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(NULL&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;hInetOpen)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;hInetConnect&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;InternetConnect(hInetOpen,&nbsp;ldCrackedURL.lpszHostName,&nbsp;ldCrackedURL.nPort,&nbsp;NULL,&nbsp;NULL,&nbsp;INTERNET_SERVICE_HTTP,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(NULL&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;hInetConnect)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;lhFile&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;CreateFile(tempfile.c_str(),&nbsp;GENERIC_READ&nbsp;</span><span style="color: #000000; ">|</span><span style="color: #000000; ">&nbsp;GENERIC_WRITE,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;NULL,&nbsp;OPEN_ALWAYS,&nbsp;FILE_ATTRIBUTE_NORMAL,&nbsp;NULL);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(lhFile&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;INVALID_HANDLE_VALUE)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;LARGE_INTEGER&nbsp;ldFileSize;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(FALSE&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;GetFileSizeEx(lhFile,&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">ldFileSize))<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;LONGLONG&nbsp;lllStartPos&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(</span><span style="color: #000000; ">0</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;ldFileSize.QuadPart)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(INVALID_SET_FILE_POINTER&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;SetFilePointer(lhFile,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;NULL,&nbsp;FILE_END))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lllStartPos&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;ldFileSize.QuadPart;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;wchar_t&nbsp;lscRangeStartPosition[</span><span style="color: #000000; ">30</span><span style="color: #000000; ">]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;{&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">&nbsp;};<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #000000; ">0</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">&nbsp;_i64tow_s((__int64)(lllStartPos),&nbsp;lscRangeStartPosition,&nbsp;</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(lscRangeStartPosition),&nbsp;</span><span style="color: #000000; ">10</span><span style="color: #000000; ">))<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;wstring&nbsp;loAdditionalHeader&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;L</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Range:&nbsp;bytes=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;loAdditionalHeader&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;lscRangeStartPosition;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;loAdditionalHeader&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;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 />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;wchar_t</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;lplpszAcceptTypes[]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;{&nbsp;L</span><span style="color: #000000; ">"</span><span style="color: #000000; ">*/*</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;NULL&nbsp;};<br />&nbsp;&nbsp;&nbsp;&nbsp;hInetRequest&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;HttpOpenRequest(hInetConnect,L</span><span style="color: #000000; ">"</span><span style="color: #000000; ">GET</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;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; ">,&nbsp;NULL,lplpszAcceptTypes,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(NULL&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;hInetConnect)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(FALSE&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;HttpSendRequest(hInetRequest,&nbsp;loAdditionalHeader.c_str(),&nbsp;loAdditionalHeader.size(),&nbsp;NULL,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">))<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;ldwStatusCode;<br />&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;ldwCbOfStatusCode&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(ldwStatusCode);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(FALSE&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;HttpQueryInfo(hInetRequest,&nbsp;HTTP_QUERY_STATUS_CODE&nbsp;</span><span style="color: #000000; ">|</span><span style="color: #000000; ">&nbsp;HTTP_QUERY_FLAG_NUMBER,&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">ldwStatusCode,&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">ldwCbOfStatusCode,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">))<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #000000; ">416</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;ldwStatusCode)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_wrename(tempfile.c_str(),&nbsp;filename.c_str());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;filename;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #000000; ">200</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">&nbsp;ldwStatusCode&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">206</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">&nbsp;ldwStatusCode)&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;dwFile&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">10000</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;dwSize&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(DWORD);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(FALSE&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;HttpQueryInfo(hInetRequest,&nbsp;HTTP_QUERY_CONTENT_LENGTH&nbsp;</span><span style="color: #000000; ">|</span><span style="color: #000000; ">&nbsp;HTTP_QUERY_FLAG_NUMBER,&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">dwFile,&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">dwSize,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">))<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dwFile&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;lllStartPos;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;BYTE&nbsp;lpbBufferToReceiveData[</span><span style="color: #000000; ">2048</span><span style="color: #000000; ">];&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;ldwCbBuffer&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">2048</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;ldwCrtCbReaded;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;ldwCbWritten&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">bool</span><span style="color: #000000; ">&nbsp;lbIsOk&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">false</span><span style="color: #000000; ">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;LONGLONG&nbsp;lllCbAllRead&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;lllStartPos;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">do</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(FALSE&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;InternetReadFile(hInetRequest,&nbsp;lpbBufferToReceiveData,&nbsp;ldwCbBuffer,&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">ldwCrtCbReaded))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">break</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(ldwCrtCbReaded&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">break</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(FALSE&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;WriteFile(lhFile,&nbsp;lpbBufferToReceiveData,&nbsp;ldwCrtCbReaded,&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">ldwCbWritten,&nbsp;NULL)&nbsp;</span><span style="color: #000000; ">||</span><span style="color: #000000; ">&nbsp;ldwCbWritten&nbsp;</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">&nbsp;ldwCrtCbReaded)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">break</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ZeroMemory(lpbBufferToReceiveData,&nbsp;ldwCrtCbReaded);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lllCbAllRead&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;ldwCrtCbReaded;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">&nbsp;p&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;lllCbAllRead&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">100.0</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">&nbsp;dwFile;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(p&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">100</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">100</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(cb)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cb(p);<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">true</span><span style="color: #000000; ">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(NULL&nbsp;</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">&nbsp;lhFile)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CloseHandle(lhFile);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(NULL&nbsp;</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">&nbsp;hInetRequest)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InternetCloseHandle(hInetRequest);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(NULL&nbsp;</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">&nbsp;hInetConnect)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InternetCloseHandle(hInetConnect);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(NULL&nbsp;</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">&nbsp;hInetOpen)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InternetCloseHandle(hInetOpen);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;_wrename(tempfile.c_str(),&nbsp;filename.c_str());<br />&nbsp;&nbsp;&nbsp;&nbsp;name&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;filename;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />}</span></div><img src ="http://www.cppblog.com/gaimor/aggbug/216297.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/gaimor/" target="_blank">ccsdu2009</a> 2019-03-14 16:31 <a href="http://www.cppblog.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.cppblog.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.cppblog.com/gaimor/archive/2016/06/03/213645.html</guid><wfw:comment>http://www.cppblog.com/gaimor/comments/213645.html</wfw:comment><comments>http://www.cppblog.com/gaimor/archive/2016/06/03/213645.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/gaimor/comments/commentRss/213645.html</wfw:commentRss><trackback:ping>http://www.cppblog.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&nbsp;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&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;ShareAm.opening)</span><span style="color: #000000; ">/</span><span style="color: #000000; ">ShareAm.opening&nbsp;</span><span style="color: #0000FF; ">as</span><span style="color: #000000; ">&nbsp;L&nbsp;<br />from&nbsp;SharePm,QQ,ShareAm<br />where&nbsp;ShareAm.date&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;QQ.date&nbsp;and&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SharePm.code&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;QQ.code&nbsp;and<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ShareAm.code&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;SharePm.code&nbsp;and&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;date(ShareAm.date,</span><span style="color: #000000; ">'</span><span style="color: #000000; ">+1&nbsp;day</span><span style="color: #000000; ">'</span><span style="color: #000000; ">)&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;SharePm.date&nbsp;<br />order&nbsp;by&nbsp;SharePm.date&nbsp;asc <br /></span></div><img src ="http://www.cppblog.com/gaimor/aggbug/213645.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/gaimor/" target="_blank">ccsdu2009</a> 2016-06-03 10:28 <a href="http://www.cppblog.com/gaimor/archive/2016/06/03/213645.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>BGE GUI升级</title><link>http://www.cppblog.com/gaimor/archive/2016/03/17/213054.html</link><dc:creator>ccsdu2009</dc:creator><author>ccsdu2009</author><pubDate>Thu, 17 Mar 2016 03:13:00 GMT</pubDate><guid>http://www.cppblog.com/gaimor/archive/2016/03/17/213054.html</guid><wfw:comment>http://www.cppblog.com/gaimor/comments/213054.html</wfw:comment><comments>http://www.cppblog.com/gaimor/archive/2016/03/17/213054.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/gaimor/comments/commentRss/213054.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/gaimor/services/trackbacks/213054.html</trackback:ping><description><![CDATA[主要解决了很多故障，增加了一点功能<br />API上参考了Qt<br /><ol><li>支持png格式</li><li>支持控件序列化，反序列化</li><li>支持换肤</li><li>代码整洁，风格良好</li><li>提供StackLayout,BoxLayout,GridLayout,FlowLayout</li><li>提供CheckBox,Panel,StaticText,ImageBox,ProgressBar,TableWidget,Slider,EditFiled,Combox等常用控件</li></ol><p>截图如下:</p><p><img src="http://www.cppblog.com/images/cppblog_com/gaimor/button.png" alt="" height="508" border="0" width="646" /></p><p><br /></p><p><img src="http://www.cppblog.com/images/cppblog_com/gaimor/table.png" alt="" height="508" border="0" width="646" /></p><p>例子1</p><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&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">BGE</span><span style="color: #000000; ">/</span><span style="color: #000000; ">All</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /><br /></span><span style="color: #0000FF; ">using</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">namespace</span><span style="color: #000000; ">&nbsp;bge;<br /><br /></span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;Dispatcher&nbsp;:&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;SlotHolder<br />{<br /></span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">:<br />&nbsp;&nbsp;&nbsp;&nbsp;Dispatcher(ImageBox</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;image,Button</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;button)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;image_&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;image;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;button_&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;button;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count_&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;click()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::</span><span style="color: #0000FF; ">string</span><span style="color: #000000; ">&nbsp;file&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">:box/side</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;toString(count_);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">.png</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;image_</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">setImage(file);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count_&nbsp;</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(count_&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">7</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count_&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">:<br />&nbsp;&nbsp;&nbsp;&nbsp;ImageBox</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;image_;<br />&nbsp;&nbsp;&nbsp;&nbsp;Button</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;button_;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;count_;<br />};<br /><br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;main(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;argc,</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;argv[])<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;FileSystem::instance().initial(argv[</span><span style="color: #000000; ">0</span><span style="color: #000000; ">]);<br />&nbsp;&nbsp;&nbsp;&nbsp;FileSystem::instance().setResourcePackage(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">data.zip</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;WindowManager::instance().initialize(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">:accid.ttf</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,</span><span style="color: #0000FF; ">false</span><span style="color: #000000; ">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;Device</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;device&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;Device::create();<br />&nbsp;&nbsp;&nbsp;&nbsp;device</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">initial();<br />&nbsp;&nbsp;&nbsp;&nbsp;device</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">createWindow(</span><span style="color: #000000; ">640</span><span style="color: #000000; ">,</span><span style="color: #000000; ">480</span><span style="color: #000000; ">,String(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">BGE&nbsp;Window</span><span style="color: #000000; ">"</span><span style="color: #000000; ">));<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;Panel</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;panel&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;Panel();<br />&nbsp;&nbsp;&nbsp;&nbsp;panel</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">setPosition(Vector2f(</span><span style="color: #000000; ">20</span><span style="color: #000000; ">,</span><span style="color: #000000; ">20</span><span style="color: #000000; ">));<br />&nbsp;&nbsp;&nbsp;&nbsp;panel</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">setSize(Vector2f(</span><span style="color: #000000; ">128</span><span style="color: #000000; ">,</span><span style="color: #000000; ">128</span><span style="color: #000000; ">+</span><span style="color: #000000; ">24</span><span style="color: #000000; ">));<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;ImageBox</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;image&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;ImageBox();<br />&nbsp;&nbsp;&nbsp;&nbsp;image</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">setImage(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">:box/side6.png</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;image</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">setPosition(Vector2f(</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">));<br />&nbsp;&nbsp;&nbsp;&nbsp;image</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">setSize(Vector2f(</span><span style="color: #000000; ">128</span><span style="color: #000000; ">,</span><span style="color: #000000; ">128</span><span style="color: #000000; ">));<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;Button</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;button&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;Button();<br />&nbsp;&nbsp;&nbsp;&nbsp;button</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">loadAppearance(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">:buttonskin1.xml</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;button</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">setSize(Vector2f(</span><span style="color: #000000; ">128</span><span style="color: #000000; ">,</span><span style="color: #000000; ">24</span><span style="color: #000000; ">));<br />&nbsp;&nbsp;&nbsp;&nbsp;button</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">setText(L</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Click</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;Dispatcher&nbsp;dispacher(image,button);<br />&nbsp;&nbsp;&nbsp;&nbsp;button</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">clicked.connect(</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">dispacher,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">Dispatcher::click);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;BoxLayout</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;layout&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;BoxLayout();<br />&nbsp;&nbsp;&nbsp;&nbsp;layout</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">setSpacing(.0f);<br />&nbsp;&nbsp;&nbsp;&nbsp;panel</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">setLayout(layout);<br />&nbsp;&nbsp;&nbsp;&nbsp;layout</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">setJustification(Orientation_vertical);<br />&nbsp;&nbsp;&nbsp;&nbsp;layout</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">addWindow(image);<br />&nbsp;&nbsp;&nbsp;&nbsp;layout</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">addWindow(button);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;panel</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">adjust();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;WindowManager::instance().addWindow(panel);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">(device</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">isRunning())<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;device</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">preRender();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WindowManager::instance().update();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;device</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">swapBuffers();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;device</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">pollEvents();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;WindowManager::instance().terminate();<br />&nbsp;&nbsp;&nbsp;&nbsp;device</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">closeWindow();<br />&nbsp;&nbsp;&nbsp;&nbsp;device</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">terminate();<br />&nbsp;&nbsp;&nbsp;&nbsp;device</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">deleteLater();<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />}<br />例子2<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&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">BGE</span><span style="color: #000000; ">/</span><span style="color: #000000; ">All</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /><br /></span><span style="color: #0000FF; ">using</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">namespace</span><span style="color: #000000; ">&nbsp;bge;<br /><br /></span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;Dispatcher&nbsp;:&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;SlotHolder<br />{<br /></span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">:<br />&nbsp;&nbsp;&nbsp;&nbsp;Dispatcher(StackLayout</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;layout,Button</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;button)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;layout_&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;layout;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;button_&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;button;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count_&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;click()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;layout_</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">setCurrentIndex(count_);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count_&nbsp;</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(count_&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">5</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count_&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">:<br />&nbsp;&nbsp;&nbsp;&nbsp;StackLayout</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;layout_;<br />&nbsp;&nbsp;&nbsp;&nbsp;Button</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;button_;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;count_;<br />};<br /><br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;main(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;argc,</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;argv[])<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;FileSystem::instance().initial(argv[</span><span style="color: #000000; ">0</span><span style="color: #000000; ">]);<br />&nbsp;&nbsp;&nbsp;&nbsp;FileSystem::instance().setResourcePackage(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">data.zip</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;WindowManager::instance().initialize(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">:accid.ttf</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,</span><span style="color: #0000FF; ">false</span><span style="color: #000000; ">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;Device</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;device&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;Device::create();<br />&nbsp;&nbsp;&nbsp;&nbsp;device</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">initial();<br />&nbsp;&nbsp;&nbsp;&nbsp;device</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">createWindow(</span><span style="color: #000000; ">640</span><span style="color: #000000; ">,</span><span style="color: #000000; ">480</span><span style="color: #000000; ">,String(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">BGE&nbsp;Window</span><span style="color: #000000; ">"</span><span style="color: #000000; ">));<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;Panel</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;panel&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;Panel();<br />&nbsp;&nbsp;&nbsp;&nbsp;panel</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">setPosition(Vector2f(</span><span style="color: #000000; ">20</span><span style="color: #000000; ">,</span><span style="color: #000000; ">20</span><span style="color: #000000; ">));<br />&nbsp;&nbsp;&nbsp;&nbsp;panel</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">setSize(Vector2f(</span><span style="color: #000000; ">128</span><span style="color: #000000; ">,</span><span style="color: #000000; ">128</span><span style="color: #000000; ">+</span><span style="color: #000000; ">24</span><span style="color: #000000; ">));<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;Panel</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;stackPanel&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;Panel();<br />&nbsp;&nbsp;&nbsp;&nbsp;stackPanel</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">setSize(Vector2f(</span><span style="color: #000000; ">128</span><span style="color: #000000; ">,</span><span style="color: #000000; ">128</span><span style="color: #000000; ">));<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;StackLayout</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;stackLayout&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;StackLayout();<br />&nbsp;&nbsp;&nbsp;&nbsp;stackPanel</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">setLayout(stackLayout);<br />&nbsp;&nbsp;&nbsp;&nbsp;stackLayout</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">setSpacing(.0f);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;i</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">7</span><span style="color: #000000; ">;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ImageBox</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;image&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;ImageBox();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::</span><span style="color: #0000FF; ">string</span><span style="color: #000000; ">&nbsp;file&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">:box/side</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;toString(i);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">.png</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;image</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">setImage(file);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;image</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">setPosition(Vector2f(</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;image</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">setSize(Vector2f(</span><span style="color: #000000; ">128</span><span style="color: #000000; ">,</span><span style="color: #000000; ">128</span><span style="color: #000000; ">));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stackLayout</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">insertWindow(i,image);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;Button</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;button&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;Button();<br />&nbsp;&nbsp;&nbsp;&nbsp;button</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">loadAppearance(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">:buttonskin1.xml</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;button</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">setSize(Vector2f(</span><span style="color: #000000; ">128</span><span style="color: #000000; ">,</span><span style="color: #000000; ">24</span><span style="color: #000000; ">));<br />&nbsp;&nbsp;&nbsp;&nbsp;button</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">setText(L</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Click</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;Dispatcher&nbsp;dispacher(stackLayout,button);<br />&nbsp;&nbsp;&nbsp;&nbsp;button</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">clicked.connect(</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">dispacher,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">Dispatcher::click);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;BoxLayout</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;layout&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;BoxLayout();<br />&nbsp;&nbsp;&nbsp;&nbsp;layout</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">setSpacing(.0f);<br />&nbsp;&nbsp;&nbsp;&nbsp;panel</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">setLayout(layout);<br />&nbsp;&nbsp;&nbsp;&nbsp;layout</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">setJustification(Orientation_vertical);<br />&nbsp;&nbsp;&nbsp;&nbsp;layout</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">addWindow(stackPanel);<br />&nbsp;&nbsp;&nbsp;&nbsp;layout</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">addWindow(button);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;panel</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">adjust();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;WindowManager::instance().addWindow(panel);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">(device</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">isRunning())<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;device</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">preRender();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WindowManager::instance().update();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;device</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">swapBuffers();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;device</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">pollEvents();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;WindowManager::instance().terminate();<br />&nbsp;&nbsp;&nbsp;&nbsp;device</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">closeWindow();<br />&nbsp;&nbsp;&nbsp;&nbsp;device</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">terminate();<br />&nbsp;&nbsp;&nbsp;&nbsp;device</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">deleteLater();<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />}<br />这2个显示效果完全一样<br />欢迎下载<br /><br /></span></div><span style="color: #000000; "><img src="http://www.cppblog.com/images/cppblog_com/gaimor/rich.png" alt="" height="508" border="0" width="646" /><br /><br /><img src="http://www.cppblog.com/images/cppblog_com/gaimor/image.png" alt="" height="508" border="0" width="646" /><br /><img src="http://www.cppblog.com/images/cppblog_com/gaimor/gird.png" alt="" height="350" border="0" width="646" /><br /><img src="http://www.cppblog.com/images/cppblog_com/gaimor/p.png" alt="" height="508" border="0" width="646" /><br /><br />在这里下载:<div>http://download.csdn.net/detail/ccsdu2004/9464121</div><br />代码有点大 这里放不下<br /><br /></span></div><img src ="http://www.cppblog.com/gaimor/aggbug/213054.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/gaimor/" target="_blank">ccsdu2009</a> 2016-03-17 11:13 <a href="http://www.cppblog.com/gaimor/archive/2016/03/17/213054.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在做一个基于OPENGL的GUI库，希望方便好用.</title><link>http://www.cppblog.com/gaimor/archive/2016/01/07/212628.html</link><dc:creator>ccsdu2009</dc:creator><author>ccsdu2009</author><pubDate>Thu, 07 Jan 2016 08:20:00 GMT</pubDate><guid>http://www.cppblog.com/gaimor/archive/2016/01/07/212628.html</guid><wfw:comment>http://www.cppblog.com/gaimor/comments/212628.html</wfw:comment><comments>http://www.cppblog.com/gaimor/archive/2016/01/07/212628.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/gaimor/comments/commentRss/212628.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/gaimor/services/trackbacks/212628.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; ">#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">BGE</span><span style="color: #000000; ">/</span><span style="color: #000000; ">all</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /><br /></span><span style="color: #0000FF; ">using</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">namespace</span><span style="color: #000000; ">&nbsp;bge;<br /><br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;main(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;argc,</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;argv[])<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">!初始化文件系统</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;FileSystem::instance()</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">initial(argv[</span><span style="color: #000000; ">0</span><span style="color: #000000; ">]);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">!加载压缩包</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;FileSystem::instance()</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">setResourcePackage(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">data.zip</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">!初始化UI管理器,设定默认字体,并设定自动删除控件</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;WindowManager::instance().initialize(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">simkai.ttf</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,</span><span style="color: #0000FF; ">true</span><span style="color: #000000; ">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">!生成和初始化窗口设备</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;Device</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;device&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;bgeCreateDevice();<br />&nbsp;&nbsp;&nbsp;&nbsp;device</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">initial();<br />&nbsp;&nbsp;&nbsp;&nbsp;device</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">createWindow(</span><span style="color: #000000; ">640</span><span style="color: #000000; ">,</span><span style="color: #000000; ">480</span><span style="color: #000000; ">,bge::String(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">BGE&nbsp;Window</span><span style="color: #000000; ">"</span><span style="color: #000000; ">));<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">!从资源文件加载控件包含子控件和控件属性</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;Window</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;window&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;WindowManager::instance().create(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">window.xml</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;bge::WindowManager::instance().addWindow(listbox);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">(device</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">isRunning())<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">!预渲染设备</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;device</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">perRender();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">!窗体更新</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bge::WindowManager::instance().update();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;device</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">swapBuffers();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;device</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">pollEvents();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">!销毁窗体管理器</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;bge::WindowManager::instance().terminate();<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">!关闭并销毁设备</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;device</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">closeWindow();<br />&nbsp;&nbsp;&nbsp;&nbsp;device</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">terminate();<br />&nbsp;&nbsp;&nbsp;&nbsp;device</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">deleteLater();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;system(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">pause</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000;">;<br />}<br /><br />还没做完，用法如上，很简练吧:D<br /><br />什么？对整体视效不满意？<br />试下这个:<div>WindowManager::instance().propertyScheme()-&gt;load("skin.xml");<br />想定制某个控件的视效?<br />Button* button = window-&gt;findChild("ok");<br />button-&gt;loadAppearance("button.xml","blue");</div><br /></span></div><img src ="http://www.cppblog.com/gaimor/aggbug/212628.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/gaimor/" target="_blank">ccsdu2009</a> 2016-01-07 16:20 <a href="http://www.cppblog.com/gaimor/archive/2016/01/07/212628.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用libpng解码png文件</title><link>http://www.cppblog.com/gaimor/archive/2015/12/29/212577.html</link><dc:creator>ccsdu2009</dc:creator><author>ccsdu2009</author><pubDate>Tue, 29 Dec 2015 03:12:00 GMT</pubDate><guid>http://www.cppblog.com/gaimor/archive/2015/12/29/212577.html</guid><wfw:comment>http://www.cppblog.com/gaimor/comments/212577.html</wfw:comment><comments>http://www.cppblog.com/gaimor/archive/2015/12/29/212577.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/gaimor/comments/commentRss/212577.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/gaimor/services/trackbacks/212577.html</trackback:ping><description><![CDATA[libpng比较另类，解码方式比较奇特，这里记录下<br />以下代码为使用虚拟IOReader的方式，稍做修改就基于FILE使用<br />代码很详细，不需额外解释<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; ">PNGImage::PNGImage(</span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;std::</span><span style="color: #0000FF; ">string</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">&nbsp;filename):<br />&nbsp;&nbsp;&nbsp;&nbsp;ReferenceCountedImage(filename),<br />&nbsp;&nbsp;&nbsp;&nbsp;data_(</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;IOReader</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;reader&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;FileSystem::instance()</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">readFile(filename);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(reader&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;png_structp&nbsp;png_ptr&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;png_create_read_struct(PNG_LIBPNG_VER_STRING,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(png_ptr&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reader</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">close();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reader</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">deleteLater();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;png_infop&nbsp;info_ptr&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;png_create_info_struct(png_ptr);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(info_ptr&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;png_destroy_read_struct(</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">png_ptr,&nbsp;png_infopp(</span><span style="color: #000000; ">0</span><span style="color: #000000; ">),&nbsp;png_infopp(</span><span style="color: #000000; ">0</span><span style="color: #000000; ">));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reader</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">close();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reader</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">deleteLater();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(setjmp(png_jmpbuf(png_ptr)))<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;png_destroy_read_struct(</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">png_ptr,png_infopp(</span><span style="color: #000000; ">0</span><span style="color: #000000; ">),png_infopp(</span><span style="color: #000000; ">0</span><span style="color: #000000; ">));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reader</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">close();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reader</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">deleteLater();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;png_set_read_fn(&nbsp;png_ptr,reader,(png_rw_ptr)user_read_data);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;png_set_sig_bytes(png_ptr,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;png_read_png(png_ptr,info_ptr,PNG_TRANSFORM_IDENTITY,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;unsigned&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;width&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;png_get_image_width(png_ptr,info_ptr);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;unsigned&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;height&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;png_get_image_height(png_ptr,info_ptr);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;unsigned&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;bit_depth&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;png_get_bit_depth(png_ptr,info_ptr);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(bit_depth&nbsp;</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">8</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reader</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">close();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reader</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">deleteLater();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;png_destroy_info_struct(png_ptr,png_infopp(</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">info_ptr));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;png_destroy_read_struct(</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">png_ptr,png_infopp(</span><span style="color: #000000; ">0</span><span style="color: #000000; ">),&nbsp;png_infopp(</span><span style="color: #000000; ">0</span><span style="color: #000000; ">));<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;png_byte&nbsp;colorType&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;png_get_color_type(png_ptr,&nbsp;info_ptr);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">((colorType&nbsp;</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">&nbsp;PNG_COLOR_TYPE_RGB)&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;(colorType&nbsp;</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">&nbsp;PNG_COLOR_TYPE_RGB_ALPHA))<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reader</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">close();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reader</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">deleteLater();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;png_destroy_info_struct(png_ptr,&nbsp;png_infopp(</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">info_ptr));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;png_destroy_read_struct(</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">png_ptr,&nbsp;png_infopp(</span><span style="color: #000000; ">0</span><span style="color: #000000; ">),&nbsp;png_infopp(</span><span style="color: #000000; ">0</span><span style="color: #000000; ">));<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;bytesPerPixel&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(colorType&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;PNG_COLOR_TYPE_RGB)&nbsp;</span><span style="color: #000000; ">?</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">3</span><span style="color: #000000; ">&nbsp;:&nbsp;</span><span style="color: #000000; ">4</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;stride&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;bytesPerPixel&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;width;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;data&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;unsigned&nbsp;</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">[stride&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;height];<br />&nbsp;&nbsp;&nbsp;&nbsp;png_bytep</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;row_pointers&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;png_get_rows(png_ptr,&nbsp;info_ptr);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">(unsigned&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;&nbsp;i&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;height;&nbsp;</span><span style="color: #000000; ">++</span><span style="color: #000000; ">i)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;unsigned&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;row&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;height&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;i&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memcpy(data&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;(row&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;stride),&nbsp;row_pointers[i],&nbsp;stride);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;size_.x_&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;width;<br />&nbsp;&nbsp;&nbsp;&nbsp;size_.y_&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;height;<br />&nbsp;&nbsp;&nbsp;&nbsp;numberOfBitsPerPixel_&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;bytesPerPixel&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">8</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;data_&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;data;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;reader</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">close();<br />&nbsp;&nbsp;&nbsp;&nbsp;reader</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">deleteLater();<br />&nbsp;&nbsp;&nbsp;&nbsp;png_destroy_info_struct(png_ptr,&nbsp;png_infopp(</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">info_ptr));<br />&nbsp;&nbsp;&nbsp;&nbsp;png_destroy_read_struct(</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">png_ptr,&nbsp;png_infopp(</span><span style="color: #000000; ">0</span><span style="color: #000000; ">),&nbsp;png_infopp(</span><span style="color: #000000; ">0</span><span style="color: #000000; ">));<br />}</span></div><img src ="http://www.cppblog.com/gaimor/aggbug/212577.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/gaimor/" target="_blank">ccsdu2009</a> 2015-12-29 11:12 <a href="http://www.cppblog.com/gaimor/archive/2015/12/29/212577.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用libcurl上传文件到sftp服务器</title><link>http://www.cppblog.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.cppblog.com/gaimor/archive/2015/08/31/211729.html</guid><wfw:comment>http://www.cppblog.com/gaimor/comments/211729.html</wfw:comment><comments>http://www.cppblog.com/gaimor/archive/2015/08/31/211729.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/gaimor/comments/commentRss/211729.html</wfw:commentRss><trackback:ping>http://www.cppblog.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&nbsp;&lt;stdio.h&gt;<br />#include&nbsp;&lt;string.h&gt;<br />#include&nbsp;&lt;curl/curl.h&gt;<br />#include&nbsp;&lt;sys/types.h&gt;<br />#include&nbsp;&lt;sys/stat.h&gt;<br />#include&nbsp;&lt;fcntl.h&gt;<br />#include&nbsp;&lt;errno.h&gt;<br />#ifdef&nbsp;WIN32<br />#include&nbsp;&lt;io.h&gt;<br />#else<br />#include&nbsp;&lt;unistd.h&gt;<br />#endif<br /><br />#define&nbsp;REMOTE_URL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"sftp://account:password@xx.xx.xx.xx/"<br /><br />static&nbsp;size_t&nbsp;read_callback(void&nbsp;*ptr,&nbsp;size_t&nbsp;size,&nbsp;size_t&nbsp;nmemb,&nbsp;void&nbsp;*stream)<br /></span><span style="color: #000000; ">{</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;curl_off_t&nbsp;nread;<br />&nbsp;&nbsp;&nbsp;&nbsp;size_t&nbsp;retcode&nbsp;=&nbsp;fread(ptr,&nbsp;size,&nbsp;nmemb,&nbsp;stream);<br />&nbsp;&nbsp;&nbsp;&nbsp;nread&nbsp;=&nbsp;(curl_off_t)retcode;<br />&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&nbsp;"***&nbsp;We&nbsp;read&nbsp;%"&nbsp;CURL_FORMAT_CURL_OFF_T&nbsp;"&nbsp;bytes&nbsp;from&nbsp;file\n",&nbsp;nread);<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;retcode;<br /></span><span style="color: #000000; ">}</span><span style="color: #800000; "><br /><br />int&nbsp;main(int&nbsp;argc,char&nbsp;*argv[])<br /></span><span style="color: #000000; ">{</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;if(argc&nbsp;!=&nbsp;3)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("2&nbsp;paramenters&nbsp;is&nbsp;needed.\n");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;-1;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">}</span><span style="color: #800000; "><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;char*&nbsp;local_file&nbsp;=&nbsp;argv[1];<br />&nbsp;&nbsp;&nbsp;&nbsp;char*&nbsp;remote_file&nbsp;=&nbsp;argv[2];<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;printf("call&nbsp;me&nbsp;for&nbsp;update&nbsp;-:%s,%s\n",local_file,remote_file);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;remoteurl[1024]&nbsp;=&nbsp;</span><span style="color: #000000; ">{</span><span style="color: #FF0000; ">0</span><span style="color: #000000; ">}</span><span style="color: #800000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;strcpy(remoteurl,REMOTE_URL);<br />&nbsp;&nbsp;&nbsp;&nbsp;strcat(remoteurl,remote_file);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;CURL*&nbsp;curl;<br />&nbsp;&nbsp;&nbsp;&nbsp;CURLcode&nbsp;res;<br />&nbsp;&nbsp;&nbsp;&nbsp;FILE*&nbsp;file;<br />&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;stat&nbsp;file_info;<br />&nbsp;&nbsp;&nbsp;&nbsp;curl_off_t&nbsp;fsize;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;if(stat(local_file,&amp;file_info))<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">{</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("couldnt&nbsp;open&nbsp;'%s'</span><span style="color: #000000; ">:</span><span style="color: #0000FF; ">&nbsp;%s\n",&nbsp;local_file,&nbsp;strerror(errno))</span><span style="color: #000000; ">;</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">}</span><span style="color: #800000; "><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;fsize&nbsp;=&nbsp;(curl_off_t)file_info.st_size;<br />&nbsp;&nbsp;&nbsp;&nbsp;printf("Local&nbsp;file&nbsp;size:&nbsp;%"&nbsp;CURL_FORMAT_CURL_OFF_T&nbsp;"&nbsp;bytes.\n",&nbsp;fsize);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;file&nbsp;=&nbsp;fopen(local_file,&nbsp;"rb");<br />&nbsp;&nbsp;&nbsp;&nbsp;curl_global_init(CURL_GLOBAL_ALL);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;curl&nbsp;=&nbsp;curl_easy_init();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;if(curl)<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">{</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;curl_easy_setopt(curl,CURLOPT_READFUNCTION,read_callback);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;curl_easy_setopt(curl,CURLOPT_UPLOAD,1L);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;curl_easy_setopt(curl,CURLOPT_URL,remoteurl);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;curl_easy_setopt(curl,CURLOPT_READDATA,file);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;curl_easy_setopt(curl,CURLOPT_INFILESIZE_LARGE,(curl_off_t)fsize);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;curl_easy_setopt(curl,CURLOPT_FTP_RESPONSE_TIMEOUT,120);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;res&nbsp;=&nbsp;curl_easy_perform(curl);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(res&nbsp;!=&nbsp;CURLE_OK)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,"curl_easy_perform()&nbsp;failed</span><span style="color: #000000; ">:</span><span style="color: #0000FF; ">&nbsp;%s\n",curl_easy_strerror(res))</span><span style="color: #000000; ">;</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;curl_easy_cleanup(curl);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,"finished&nbsp;update.");<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">}</span><span style="color: #800000; "><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;fclose(file);<br />&nbsp;&nbsp;&nbsp;&nbsp;curl_global_cleanup();<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;<br />}<br /><br />以上代码经过实际测试.<br /></span></div><img src ="http://www.cppblog.com/gaimor/aggbug/211729.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/gaimor/" target="_blank">ccsdu2009</a> 2015-08-31 17:21 <a href="http://www.cppblog.com/gaimor/archive/2015/08/31/211729.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>openal中的alThunk</title><link>http://www.cppblog.com/gaimor/archive/2015/06/29/211081.html</link><dc:creator>ccsdu2009</dc:creator><author>ccsdu2009</author><pubDate>Mon, 29 Jun 2015 05:24:00 GMT</pubDate><guid>http://www.cppblog.com/gaimor/archive/2015/06/29/211081.html</guid><wfw:comment>http://www.cppblog.com/gaimor/comments/211081.html</wfw:comment><comments>http://www.cppblog.com/gaimor/archive/2015/06/29/211081.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/gaimor/comments/commentRss/211081.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/gaimor/services/trackbacks/211081.html</trackback:ping><description><![CDATA[这个其实是一个线程安全的int mapper<br /><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: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;alThunkInit(</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">);<br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;alThunkExit(</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">);<br />ALuint&nbsp;alThunkAddEntry(ALvoid&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;ptr);<br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;alThunkRemoveEntry(ALuint&nbsp;index);<br />ALvoid&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">alThunkLookupEntry(ALuint&nbsp;index);<br /><br /><br />typedef&nbsp;</span><span style="color: #0000FF; ">struct</span><span style="color: #000000; ">&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;ALvoid&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">ptr;<br />&nbsp;&nbsp;&nbsp;&nbsp;ALboolean&nbsp;InUse;<br />}&nbsp;ThunkEntry;<br /><br /></span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;ThunkEntry&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">g_ThunkArray;<br /></span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;ALuint&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_ThunkArraySize;<br /><br /></span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;CRITICAL_SECTION&nbsp;g_ThunkLock;<br /><br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;alThunkInit(</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;InitializeCriticalSection(</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">g_ThunkLock);<br />&nbsp;&nbsp;&nbsp;&nbsp;g_ThunkArraySize&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;g_ThunkArray&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;calloc(</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,&nbsp;g_ThunkArraySize&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(ThunkEntry));<br />}<br /><br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;alThunkExit(</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;free(g_ThunkArray);<br />&nbsp;&nbsp;&nbsp;&nbsp;g_ThunkArray&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;NULL;<br />&nbsp;&nbsp;&nbsp;&nbsp;g_ThunkArraySize&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;DeleteCriticalSection(</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">g_ThunkLock);<br />}<br /><br />ALuint&nbsp;alThunkAddEntry(ALvoid&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">ptr)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;ALuint&nbsp;index;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;EnterCriticalSection(</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">g_ThunkLock);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">(index&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;index&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;g_ThunkArraySize;index</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(g_ThunkArray[index].InUse&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;AL_FALSE)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">break</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(index&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;g_ThunkArraySize)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ThunkEntry&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">NewList;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NewList&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;realloc(g_ThunkArray,&nbsp;g_ThunkArraySize</span><span style="color: #000000; ">*</span><span style="color: #000000; ">2</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(ThunkEntry));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(</span><span style="color: #000000; ">!</span><span style="color: #000000; ">NewList)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LeaveCriticalSection(</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">g_ThunkLock);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">NewList[g_ThunkArraySize],&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;g_ThunkArraySize</span><span style="color: #000000; ">*</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(ThunkEntry));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_ThunkArraySize&nbsp;</span><span style="color: #000000; ">*=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">2</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_ThunkArray&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;NewList;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;g_ThunkArray[index].ptr&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;ptr;<br />&nbsp;&nbsp;&nbsp;&nbsp;g_ThunkArray[index].InUse&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;AL_TRUE;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;LeaveCriticalSection(</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">g_ThunkLock);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;index</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />}<br /><br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;alThunkRemoveEntry(ALuint&nbsp;index)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;EnterCriticalSection(</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">g_ThunkLock);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(index&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;index&nbsp;</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">&nbsp;g_ThunkArraySize)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_ThunkArray[index</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">].InUse&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;AL_FALSE;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;LeaveCriticalSection(</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">g_ThunkLock);<br />}<br /><br />ALvoid&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">alThunkLookupEntry(ALuint&nbsp;index)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;ALvoid&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">ptr&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;NULL;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;EnterCriticalSection(</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">g_ThunkLock);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(index&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;index&nbsp;</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">&nbsp;g_ThunkArraySize)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ptr&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;g_ThunkArray[index</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">].ptr;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;LeaveCriticalSection(</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">g_ThunkLock);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;ptr;<br />}<br /></span></div>用途比较广<img src ="http://www.cppblog.com/gaimor/aggbug/211081.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/gaimor/" target="_blank">ccsdu2009</a> 2015-06-29 13:24 <a href="http://www.cppblog.com/gaimor/archive/2015/06/29/211081.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Android Animation和Visible的问题</title><link>http://www.cppblog.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.cppblog.com/gaimor/archive/2013/10/30/204006.html</guid><wfw:comment>http://www.cppblog.com/gaimor/comments/204006.html</wfw:comment><comments>http://www.cppblog.com/gaimor/archive/2013/10/30/204006.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/gaimor/comments/commentRss/204006.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/gaimor/services/trackbacks/204006.html</trackback:ping><description><![CDATA[发现一个问题imageView.startAnimation启动控件动画以后<br />由于一些原因需要设置控件为GONE状态，也就是imageView.s<em>etVisibility</em>(View.GONE);<br />之后发现控件处于GONE状态，但是控件还是可见的<br />上网查了下发现要清空动画，也就是imageView.clearAnimation<br /><br />其实我觉得如果调用setVisibility(View.GONE)之后无论当前有无动画都应该消失<br />设置为GONE状态后控件状态出现异常<br /><br />按照当前情况要隐藏控件需要先调用cleanAnimation,之后call setVisibility<br />所以有空想想android API也并非十全十美.<br />各位觉得呢？<img src ="http://www.cppblog.com/gaimor/aggbug/204006.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/gaimor/" target="_blank">ccsdu2009</a> 2013-10-30 22:26 <a href="http://www.cppblog.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.cppblog.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.cppblog.com/gaimor/archive/2013/09/13/203225.html</guid><wfw:comment>http://www.cppblog.com/gaimor/comments/203225.html</wfw:comment><comments>http://www.cppblog.com/gaimor/archive/2013/09/13/203225.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/gaimor/comments/commentRss/203225.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/gaimor/services/trackbacks/203225.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 之前写了一个dll，具体在这里http://www.cppblog.com/gaimor/anarchive/2013/07/11/201711.html现在想增加一个c#绑定,上网搜了下很简单就实现了实现后的cs代码如下(当前只实现了一部分):Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.Co...&nbsp;&nbsp;<a href='http://www.cppblog.com/gaimor/archive/2013/09/13/203225.html'>阅读全文</a><img src ="http://www.cppblog.com/gaimor/aggbug/203225.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/gaimor/" target="_blank">ccsdu2009</a> 2013-09-13 20:55 <a href="http://www.cppblog.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.cppblog.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.cppblog.com/gaimor/archive/2013/04/09/199287.html</guid><wfw:comment>http://www.cppblog.com/gaimor/comments/199287.html</wfw:comment><comments>http://www.cppblog.com/gaimor/archive/2013/04/09/199287.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/gaimor/comments/commentRss/199287.html</wfw:commentRss><trackback:ping>http://www.cppblog.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&nbsp;STREAM_BUFFER_H<br /></span><span style="color: #0000FF; ">#define</span><span style="color: #000000; ">&nbsp;STREAM_BUFFER_H</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">stdio.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">stdlib.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include&nbsp;</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&nbsp;</span><span style="color: #0000FF; ">struct</span><span style="color: #000000; ">&nbsp;_streamBuffer&nbsp;streamBuffer;<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">typedef&nbsp;size_t(*streamRead)(void*&nbsp;ctx,void*&nbsp;ptr,size_t&nbsp;size,size_t&nbsp;nmemb);<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">typedef&nbsp;int(*streamSeek)(void*&nbsp;ctx,glong&nbsp;offset,int&nbsp;flag);<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">typedef&nbsp;int(*streamClose)(void*&nbsp;ctx);</span><span style="color: #008000; "><br /></span><span style="color: #000000; "><br />streamBuffer</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;stream_open_file(</span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;gchar</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;file);<br />streamBuffer</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;stream_open_mem(gvoid</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;mem,gulong&nbsp;size);<br />streamBuffer</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;stream_open_callbacks(gread&nbsp;read,gseek&nbsp;seek,gtell&nbsp;tell,gclose&nbsp;close,gvoid</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;context);<br />glong&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stream_read(streamBuffer</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;stream,gvoid</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;ptr,gint&nbsp;size,glong&nbsp;nmemb);<br />glong&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stream_seek(streamBuffer</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;stream,glong&nbsp;offset,gint&nbsp;flag);<br />glong&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stream_close(streamBuffer</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;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; ">!&nbsp;by&nbsp;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&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">stdio.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">string</span><span style="color: #000000; ">.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">streamBuffer.h</span><span style="color: #000000; ">"</span><span style="color: #000000; "><br />#include&nbsp;</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; ">&nbsp;_streamBuffer<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;gread&nbsp;&nbsp;read;<br />&nbsp;&nbsp;&nbsp;&nbsp;gseek&nbsp;&nbsp;seek;<br />&nbsp;&nbsp;&nbsp;&nbsp;gclose&nbsp;close;<br />&nbsp;&nbsp;&nbsp;&nbsp;gtell&nbsp;&nbsp;tell;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;&nbsp;ctx;<br />};<br /><br />typedef&nbsp;</span><span style="color: #0000FF; ">struct</span><span style="color: #000000; ">&nbsp;_stdIOContext<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;FILE&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">fp;<br />}stdIOContext;<br /><br />glong&nbsp;stdio_stream_read(gvoid</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;ptr,gint&nbsp;size,glong&nbsp;nmemb,gvoid</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;ctx)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;fread(ptr,size,nmemb,((stdIOContext</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)ctx)</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">fp);<br />}<br /><br />glong&nbsp;stdio_stream_seek(gvoid</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;ctx,glong&nbsp;offset,gint&nbsp;flag)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;fseek(((stdIOContext</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)ctx)</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">fp,offset,flag);<br />}<br /><br />glong&nbsp;APIENTRY&nbsp;stdio_stream_tell(gvoid</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;ctx)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;ftell(((stdIOContext</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)ctx)</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">fp);<br />}<br /><br />glong&nbsp;stdio_stream_close(gvoid</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;ptr)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;stdIOContext</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;ctx&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(stdIOContext</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)ptr;<br />&nbsp;&nbsp;&nbsp;&nbsp;gint&nbsp;ret&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;ret&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;fclose(ctx</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">fp);<br />&nbsp;&nbsp;&nbsp;&nbsp;gFreeBuffer(ctx);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;ret;<br />}<br /><br />typedef&nbsp;</span><span style="color: #0000FF; ">struct</span><span style="color: #000000; ">&nbsp;memContext<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;guchar</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">base</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;guchar</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;current;<br />&nbsp;&nbsp;&nbsp;&nbsp;guchar</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;end;<br />}memContext;<br /><br />glong&nbsp;mem_stream_read(gvoid</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;ptr,gint&nbsp;size,glong&nbsp;nmemb,gvoid</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;ctx)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;streamBuffer</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;stream&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(streamBuffer</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)ctx;<br />&nbsp;&nbsp;&nbsp;&nbsp;memContext&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">c;<br />&nbsp;&nbsp;&nbsp;&nbsp;glong&nbsp;count;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(memContext</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)stream;<br />&nbsp;&nbsp;&nbsp;&nbsp;count&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;nmemb;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(c</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">current&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;count&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;size&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;c</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">end)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(c</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">end&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;c</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">current)&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">&nbsp;size;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;memcpy(ptr,&nbsp;c</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">current,&nbsp;count&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;size);<br />&nbsp;&nbsp;&nbsp;&nbsp;c</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">current&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;count&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;size;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;count;<br />}<br /><br />glong&nbsp;mem_stream_seek(gvoid</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;ctx,glong&nbsp;offset,gint&nbsp;flag)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;streamBuffer</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;stream&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(streamBuffer</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)ctx;<br />&nbsp;&nbsp;&nbsp;&nbsp;memContext</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;c;<br />&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(memContext</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)stream;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(c&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;NULL)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(flag&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;SEEK_SET)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(offset&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">||</span><span style="color: #000000; ">&nbsp;offset&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;c</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">end&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;c</span><span style="color: #000000; ">-&gt;</span><span style="color: #0000FF; ">base</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">current&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;c</span><span style="color: #000000; ">-&gt;</span><span style="color: #0000FF; ">base</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;offset;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(flag&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;SEEK_CUR)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(offset&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(offset&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;c</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">end&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;c</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">current)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">current&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;offset;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(offset&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(</span><span style="color: #000000; ">-</span><span style="color: #000000; ">offset&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;c</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">current&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;c</span><span style="color: #000000; ">-&gt;</span><span style="color: #0000FF; ">base</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">current&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;offset;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(flag&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;SEEK_END)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(offset&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">||</span><span style="color: #000000; ">&nbsp;offset&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;c</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">end&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;c</span><span style="color: #000000; ">-&gt;</span><span style="color: #0000FF; ">base</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">current&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;c</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">end&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;offset;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />}<br /><br />glong&nbsp;mem_stream_close(gvoid&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">ptr)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;memContext</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;ctx&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(memContext</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)ptr;<br />&nbsp;&nbsp;&nbsp;&nbsp;gFreeBuffer(ctx</span><span style="color: #000000; ">-&gt;</span><span style="color: #0000FF; ">base</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;gFreeBuffer(ctx);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</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; ">&nbsp;stream_open_fp(FILE</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;fp)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;stdIOContext</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;ctx;<br />&nbsp;&nbsp;&nbsp;&nbsp;streamBuffer</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;stream;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;stream&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;gcreate_buffer</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">streamBuffer</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">(</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(stream&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;NULL)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;NULL;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;ctx&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;gcreate_buffer</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">stdIOContext</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">(</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(ctx&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;NULL)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gFreeBuffer(stream);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;NULL;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;ctx</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">fp&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;fp;<br />&nbsp;&nbsp;&nbsp;&nbsp;stream</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">ctx&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;ctx;<br />&nbsp;&nbsp;&nbsp;&nbsp;stream</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">read&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;stdio_stream_read;<br />&nbsp;&nbsp;&nbsp;&nbsp;stream</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">seek&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;stdio_stream_seek;<br />&nbsp;&nbsp;&nbsp;&nbsp;stream</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">close&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;stdio_stream_close;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;stream;<br />}<br /><br />streamBuffer</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;stream_open_file(</span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;gchar&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">file)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;FILE&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">fp;<br />&nbsp;&nbsp;&nbsp;&nbsp;fp&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;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 />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(fp&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;NULL)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;NULL;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;stream_open_fp(fp);<br />}<br /><br />streamBuffer</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;stream_open_mem(gvoid</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;mem,gulong&nbsp;size)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;memContext</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;ctx;<br />&nbsp;&nbsp;&nbsp;&nbsp;streamBuffer</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;stream;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;stream&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;gcreate_buffer</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">streamBuffer</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">(</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(stream&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;NULL)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;NULL;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;ctx&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;gcreate_buffer</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">memContext</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">(</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(ctx&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;NULL)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gFreeBuffer(stream);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;NULL;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;ctx</span><span style="color: #000000; ">-&gt;</span><span style="color: #0000FF; ">base</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(guchar</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)mem;<br />&nbsp;&nbsp;&nbsp;&nbsp;ctx</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">current&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(guchar</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)mem;<br />&nbsp;&nbsp;&nbsp;&nbsp;ctx</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">end&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;((guchar</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)&nbsp;mem)&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;size;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;stream</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">ctx&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;ctx;<br />&nbsp;&nbsp;&nbsp;&nbsp;stream</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">read&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;mem_stream_read;<br />&nbsp;&nbsp;&nbsp;&nbsp;stream</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">seek&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;mem_stream_seek;<br />&nbsp;&nbsp;&nbsp;&nbsp;stream</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">close&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;mem_stream_close;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;stream;<br />}<br /><br />streamBuffer</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;stream_open_callbacks(gread&nbsp;read,gseek&nbsp;seek,gtell&nbsp;tell,gclose&nbsp;close,gvoid</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;context)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;streamBuffer</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;stream&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;gcreate_buffer</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">streamBuffer</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">(</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(stream&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;NULL)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;NULL;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;stream</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">ctx&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;context;<br />&nbsp;&nbsp;&nbsp;&nbsp;stream</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">read&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;read;<br />&nbsp;&nbsp;&nbsp;&nbsp;stream</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">seek&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;seek;<br />&nbsp;&nbsp;&nbsp;&nbsp;stream</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">tell&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;tell;<br />&nbsp;&nbsp;&nbsp;&nbsp;stream</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">close&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;close;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;stream;<br />}<br /><br />glong&nbsp;stream_read(streamBuffer</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;stream,gvoid</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;ptr,gint&nbsp;size,glong&nbsp;nmemb)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;stream</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">read(ptr,size,nmemb,stream</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">ctx);<br />}<br /><br />glong&nbsp;stream_seek(streamBuffer</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;stream,glong&nbsp;offset,gint&nbsp;flag)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;stream</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">seek(stream,offset,flag);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/*</span><span style="color: #008000; ">size_t&nbsp;c;<br />&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;tmp[1024];<br />&nbsp;&nbsp;&nbsp;&nbsp;while(offset&nbsp;&gt;&nbsp;0)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;=&nbsp;offset;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(c&nbsp;&gt;&nbsp;1024)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;=&nbsp;1024;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;offset&nbsp;-=&nbsp;c;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(c&nbsp;!=&nbsp;stream_read(stream,tmp,1,c))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;1;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />}<br /><br />glong&nbsp;stream_close(streamBuffer</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;stream)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;gint&nbsp;ret&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;stream</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">close(stream</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">ctx);<br />&nbsp;&nbsp;&nbsp;&nbsp;gFreeBuffer(stream);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;ret;<br />}</span></div></div><img src ="http://www.cppblog.com/gaimor/aggbug/199287.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/gaimor/" target="_blank">ccsdu2009</a> 2013-04-09 20:56 <a href="http://www.cppblog.com/gaimor/archive/2013/04/09/199287.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>c语言调用Python脚本-2</title><link>http://www.cppblog.com/gaimor/archive/2013/01/15/197300.html</link><dc:creator>ccsdu2009</dc:creator><author>ccsdu2009</author><pubDate>Tue, 15 Jan 2013 13:39:00 GMT</pubDate><guid>http://www.cppblog.com/gaimor/archive/2013/01/15/197300.html</guid><wfw:comment>http://www.cppblog.com/gaimor/comments/197300.html</wfw:comment><comments>http://www.cppblog.com/gaimor/archive/2013/01/15/197300.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/gaimor/comments/commentRss/197300.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/gaimor/services/trackbacks/197300.html</trackback:ping><description><![CDATA[python代码二段:<br /><br />call.py<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: #0000FF; ">def</span><span style="color: #000000; ">&nbsp;test():<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">print</span><span style="color: #000000; ">&nbsp;</span><span style="color: #800000; ">'</span><span style="color: #800000; ">hello&nbsp;world</span><span style="color: #800000; ">'</span><span style="color: #000000; "><br /><br /><br /></span><span style="color: #0000FF; ">def</span><span style="color: #000000; ">&nbsp;add(a,b):<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;a&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;b</span></div><br />api.py<br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;io<br /><br /></span><span style="color: #0000FF; ">def</span><span style="color: #000000; ">&nbsp;load_test():<br />&nbsp;&nbsp;&nbsp;&nbsp;fp&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;open(</span><span style="color: #800000; ">'</span><span style="color: #800000; ">call.py</span><span style="color: #800000; ">'</span><span style="color: #000000; ">,</span><span style="color: #800000; ">'</span><span style="color: #800000; ">r</span><span style="color: #800000; ">'</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;buffer&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #800000; ">''</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;fp:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buffer&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;fp.read()<br />&nbsp;&nbsp;&nbsp;&nbsp;fp.close()<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000;">&nbsp;buffer<br /><br />cpp代码:<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&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">stdio.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">stdlib.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">Python.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /><br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;main(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;argc,&nbsp;</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">argv[])<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;Py_Initialize();&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(</span><span style="color: #000000; ">!</span><span style="color: #000000; ">Py_IsInitialized())&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;PyRun_SimpleString(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">import&nbsp;sys</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;PyRun_SimpleString(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">sys.path.append('./')</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;PyObject</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;pName;<br />&nbsp;&nbsp;&nbsp;&nbsp;PyObject</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;pModule;<br />&nbsp;&nbsp;&nbsp;&nbsp;PyObject</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;pDict;<br />&nbsp;&nbsp;&nbsp;&nbsp;PyObject</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;pFunc;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;pName&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;PyString_FromString(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">api</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;pModule&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;PyImport_Import(pName);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(</span><span style="color: #000000; ">!</span><span style="color: #000000; ">pModule)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">can't&nbsp;find&nbsp;call.py</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getchar();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;pDict&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;PyModule_GetDict(pModule);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(</span><span style="color: #000000; ">!</span><span style="color: #000000; ">pDict)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pFunc&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;PyDict_GetItemString(pDict,</span><span style="color: #000000; ">"</span><span style="color: #000000; ">load_test</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(</span><span style="color: #000000; ">!</span><span style="color: #000000; ">pFunc&nbsp;</span><span style="color: #000000; ">||</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">!</span><span style="color: #000000; ">PyCallable_Check(pFunc))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">can't&nbsp;find&nbsp;function&nbsp;[test]</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getchar();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PyObject&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">pFn&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;PyObject_CallObject(pFunc,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;buffer&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;PyString_AsString(pFn);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%s\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,buffer);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PyObject</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;o&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;Py_CompileString(buffer,</span><span style="color: #000000; ">"</span><span style="color: #000000; ">none</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,Py_file_input);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PyObject</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;m&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;PyImport_ExecCodeModule(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">a.a</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,o);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PyObject</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;d&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;PyModule_GetDict(m);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pFunc&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;PyDict_GetItemString(d,</span><span style="color: #000000; ">"</span><span style="color: #000000; ">add</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(</span><span style="color: #000000; ">!</span><span style="color: #000000; ">pFunc&nbsp;</span><span style="color: #000000; ">||</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">!</span><span style="color: #000000; ">PyCallable_Check(pFunc))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">can't&nbsp;find&nbsp;function&nbsp;[add]</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getchar();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PyObject</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;args&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;PyTuple_New(</span><span style="color: #000000; ">2</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PyTuple_SetItem(args,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,Py_BuildValue(</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; ">3</span><span style="color: #000000; ">));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PyTuple_SetItem(args,</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,Py_BuildValue(</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; ">4</span><span style="color: #000000; ">));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PyObject&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">pAdded&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;PyObject_CallObject(pFunc,args);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;ret&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;PyInt_AsLong(pAdded);&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">add&nbsp;value:%d\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,ret);&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Py_Finalize();&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;system(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">PAUSE</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />}<br /></span></div><br /><span style="color: #000000;">这段代码和上一篇有点区别<br />主要区别是从从内存载入python模块然后调用函数<br />主要部分是这块:<br /><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PyObject* o = Py_CompileString(buffer,"none",Py_file_input);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PyObject* m = PyImport_ExecCodeModule("a.a",o);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PyObject* d = PyModule_GetDict(m);</div>buffer是python源码字符串<br /><br />在python2.7中执行正常<br /></span></div><img src ="http://www.cppblog.com/gaimor/aggbug/197300.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/gaimor/" target="_blank">ccsdu2009</a> 2013-01-15 21:39 <a href="http://www.cppblog.com/gaimor/archive/2013/01/15/197300.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>