﻿<?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++博客-多一分钟学习，早一秒钟提高</title><link>http://www.cppblog.com/xkjy3000/</link><description>VC++、C++、Socket、DirectUI、wxWidgets、Cocos2d-x、CocosCreator、Unity3D、UE4、ThinkPHP</description><language>zh-cn</language><lastBuildDate>Sat, 04 Apr 2026 09:33:21 GMT</lastBuildDate><pubDate>Sat, 04 Apr 2026 09:33:21 GMT</pubDate><ttl>60</ttl><item><title>Windows环境下wampserver的配置教程——超级详细</title><link>http://www.cppblog.com/xkjy3000/archive/2017/04/08/214821.html</link><dc:creator>虚空骄阳</dc:creator><author>虚空骄阳</author><pubDate>Sat, 08 Apr 2017 09:32:00 GMT</pubDate><guid>http://www.cppblog.com/xkjy3000/archive/2017/04/08/214821.html</guid><wfw:comment>http://www.cppblog.com/xkjy3000/comments/214821.html</wfw:comment><comments>http://www.cppblog.com/xkjy3000/archive/2017/04/08/214821.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xkjy3000/comments/commentRss/214821.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xkjy3000/services/trackbacks/214821.html</trackback:ping><description><![CDATA[<p align="left">对于初做<a title="PHP知识库" style="color: #df3434; font-weight: bold;" href="http://lib.csdn.net/base/php" target="_blank">PHP</a>网站的朋友来说，第一步肯定是希望在自己电脑是搭建PHP环境，省去空间和上传的麻烦！但搭建</p><p align="left">环境也不是件容易的事情，特别是对于新手同学来说！因此在这里跟大家介绍我作为一名新手在使用的方便好用</p><p align="left">的PHP服务器架设软件，那就是wampserver，这款软件在安装的过程中就已经把Apache、<a title="MySQL知识库" style="color: #df3434; font-weight: bold;" href="http://lib.csdn.net/base/mysql" target="_blank">MySQL</a>、PHP继承好</p><p align="left">了，而且也做好了相应的配置，除此之外，还加上了SQLitemanager和Phpmyadmin，省去了很多复杂的配置过</p><p align="left">程，让我们能把更多的时间放在程序开发上。更值得高兴地是这款软件也是完全免费的。重要提示：基本上每一</p><p align="left">步更改配置文件的操作结束之后，均在重启了相应服务之后才会生效，也就是说如果想要修改立即生效的话，必</p><p align="left">须在修改完毕保存之后重新启动一下相应的服务！<br /> 一、安装wampserver&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;安装wampserver的过程很简单，只要一直点击next就可以完成安装了：依次按图操作了<br /></p><p>1<img style="border: 0px currentColor; border-image: none;" alt="windows环境下wampserver的配置教程&#8212;&#8212;超级详细 - youyou - youyou" src="http://image67.360doc.com/DownloadImg/2013/11/1309/36660077_1.jpg" /></p><p><img style="border: 0px currentColor; border-image: none;" alt="windows环境下wampserver的配置教程&#8212;&#8212;超级详细 - youyou - youyou" src="http://image67.360doc.com/DownloadImg/2013/11/1309/36660077_2.jpg" /></p><p><img width="511" height="392" style="border: 0px currentColor; border-image: none;" alt="windows环境下wampserver的配置教程&#8212;&#8212;超级详细 - youyou - youyou" src="http://image67.360doc.com/DownloadImg/2013/11/1309/36660077_3.jpg" /></p><p><img style="border: 0px currentColor; border-image: none;" alt="windows环境下wampserver的配置教程&#8212;&#8212;超级详细 - youyou - youyou" src="http://image67.360doc.com/DownloadImg/2013/11/1309/36660077_4.jpg" /></p><p><img style="border: 0px currentColor; border-image: none;" alt="windows环境下wampserver的配置教程&#8212;&#8212;超级详细 - youyou - youyou" src="http://image67.360doc.com/DownloadImg/2013/11/1309/36660077_5.jpg" /></p><p><img style="border: 0px currentColor; border-image: none;" alt="windows环境下wampserver的配置教程&#8212;&#8212;超级详细 - youyou - youyou" src="http://image67.360doc.com/DownloadImg/2013/11/1309/36660077_6.jpg" /></p><p><img style="border: 0px currentColor; border-image: none;" alt="windows环境下wampserver的配置教程&#8212;&#8212;超级详细 - youyou - youyou" src="http://image67.360doc.com/DownloadImg/2013/11/1309/36660077_7.jpg" /></p><p>&nbsp; &nbsp;&nbsp; &nbsp;7、上图为选择默认浏览工具：安装过程中会提示要选择默认浏览工具，如上图所示，不过要注意哦，这个浏览工具</p><p>指的可不是浏览器哦，它指的是windows的浏览器，也就是explorer.exe，默认的就是这个，直接点击&#8220;打开&#8221;</p><p>就可以了。<br /></p><p><img style="border: 0px currentColor; border-image: none;" alt="windows环境下wampserver的配置教程&#8212;&#8212;超级详细 - youyou - youyou" src="http://image67.360doc.com/DownloadImg/2013/11/1309/36660077_8.jpg" />&nbsp;</p><p>&nbsp; &nbsp;&nbsp;&nbsp;8、如上图所示，会提示一个输入管理员邮箱以及邮箱SMTP服务器的窗口，这个如果大家愿意填写，可以填一下，</p><p>不过一般情况下直接点击next就可以了，不会影响安装。<br /></p><p><img width="503" height="393" style="border: 0px currentColor; border-image: none;" alt="windows环境下wampserver的配置教程&#8212;&#8212;超级详细 - youyou - youyou" src="http://image67.360doc.com/DownloadImg/2013/11/1309/36660077_9.jpg" /><br />&nbsp;&nbsp;OK，安装顺利结束！很简单吧！<br />10、安装完之后屏幕右下角就会出来一个标记<img style="border: 0px currentColor; border-image: none;" alt="windows环境下wampserver的配置教程&#8212;&#8212;超级详细 - youyou - youyou" src="http://image67.360doc.com/DownloadImg/2013/11/1309/36660077_10.jpg" />，你右键单击，然后依次选择Language&#8212;Chinese，</p><p><img style="border: 0px currentColor; border-image: none;" alt="windows环境下wampserver的配置教程&#8212;&#8212;超级详细 - youyou - youyou" src="http://image67.360doc.com/DownloadImg/2013/11/1309/36660077_11.jpg" />&nbsp;&nbsp;&nbsp; 再看&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img style="border: 0px currentColor; border-image: none;" alt="windows环境下wampserver的配置教程&#8212;&#8212;超级详细 - youyou - youyou" src="http://image67.360doc.com/DownloadImg/2013/11/1309/36660077_12.jpg" /><br /></p><p><br />11、左键单击<img width="55" height="26" style="border: 0px currentColor; border-image: none;" alt="windows环境下wampserver的配置教程&#8212;&#8212;超级详细 - youyou - youyou" src="http://image67.360doc.com/DownloadImg/2013/11/1309/36660077_10.jpg" />，再点击&#8220;www 目录&#8221;会打开安装wampserver默认存放网页文件夹，但是很多时候，我们存放网页</p><p>的文件夹并不是在那个目录下的，怎么才能改掉这个目录呢？当然有办法，打开wampserver的安装目录，在打开里面的</p><p>&#8220;script&#8221;文件夹，用记事本打开里面的config.inc.php，找到&#8220;$wwwDir = $c_installDir.'/www';&#8221;，改成大家希望的目录就</p><p>行了，比如改成D:\website，对应的代码就是$wwwDir = &#8216;D:/website&#8217;;（注意，windows下表示路径的&#8220;\&#8221;在这里必须</p><p>改为&#8220;/&#8221;）。然后关闭wampserver，然后再打开，www目录就变成我们设定的D:\website了。（注意：这里修改的只</p><p>是wampserver上的一个链接&lt;如非特殊需要，不建议大家更改&gt;，真正的Apache的目录并不是在这里该的，改得方式</p><p>请大家别着急，继续往下看。）<br /> 二、MySQL以及PhpMyAdmin的配置<br />&nbsp; &nbsp;&nbsp;&nbsp;单独安装过MySQL的朋友们肯定会发现一个问题，以前安装MySQL的时候是需要配置一个root的密码的，可是安装</p><p>wampserver的时候，至始至终都没有配置密码的步骤，那岂不是MySQL为空密码了？答案是肯定的，确实是空密码。</p><p>这样岂不是很不安全？非常对，所以我们要修改密码呀，呵呵<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1、左键点击，选择&#8220;phpMyAdmin&#8221;，就会打开phpMyAdmin的管理页面，点击右上方的&#8220;权限&#8221;，一般情况下会</p><p>出现如图所示的表格，我们要做的就是点击每一行用户名为root的右边的。<br /></p><p><img width="784" height="342" style="border: 0px currentColor; border-image: none;" alt="windows环境下wampserver的配置教程&#8212;&#8212;超级详细 - youyou - youyou" src="http://image67.360doc.com/DownloadImg/2013/11/1309/36660077_13.jpg" /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2、点击后，找到如图二所示的修改密码区域，填入欲修改的密码，再点击右下方的执行，片刻之后上方就会出现</p><p>修改成功的提示，每一个root用户均需要做此操作，如果一时半会想不到一个好的密码，也可以使用&#8220;生成密码&#8221;</p><p>功能生成一个随机的密码，但是这个密码一定要记住，忘记了麻烦可就大了。<br /><img width="718" height="192" style="border: 0px currentColor; border-image: none; width: 827px; height: 197px;" alt="windows环境下wampserver的配置教程&#8212;&#8212;超级详细 - youyou - youyou" src="http://image67.360doc.com/DownloadImg/2013/11/1309/36660077_14.jpg" /><br /></p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;备注：修改密码后可以看到 对应账户 密码栏 由原来的&#8220;否&#8221;变为&#8220;是&#8221;，如上图 绿色圈出部分。那么添加</p><p>新用户（接下来会详细讲到）、删除用户 如 上图红色标出部分即可完成操作！<br />&nbsp; &nbsp;&nbsp; &nbsp;3、做完上述操作之后重启一下MySQL服务，然后刷新页面，大家就会发现出现了如图所示的错误，这是为什么呢？</p><p><img width="799" height="213" style="border: 0px currentColor; border-image: none;" alt="windows环境下wampserver的配置教程&#8212;&#8212;超级详细 - youyou - youyou" src="http://image67.360doc.com/DownloadImg/2013/11/1309/36660077_15.jpg" /><br /> 是因为刚才我们修改了MySQL的密码，但是没有修改phpMyAdmin与MySQL通讯的密码，怎么改呢？打开wampserver</p><p>安装目录，然后依次打开\wamp\apps\phpmyadmin3.3.9，用记事本或者DW软件打开里面的config.inc.php，找到&#8220;</p><p>$cfg['Servers'][$i]['password'] = '';&#8221;，在最后的两个单引号里面输入刚才修改的那个密码，然后保存，操作完毕之后</p><p>再刷新一下phpMyAdmin的页面，是不是恢复正常了呢？<br /></p><br /><img alt="windows环境下wampserver的配置教程&#8212;&#8212;超级详细 - youyou - youyou" src="http://image67.360doc.com/DownloadImg/2013/11/1309/36660077_16.jpg" /><br /><p><br />&nbsp; &nbsp;&nbsp; &nbsp;4、做完了上面的配置之后，我们需要给MySQL<a title="MySQL知识库" style="color: #df3434; font-weight: bold;" href="http://lib.csdn.net/base/mysql" target="_blank">数据库</a>创建一个用户以及用户对应的数据库，同样，点击右上方的</p><p>权限按钮，找到中间偏下面的一个&#8220;添加新用户&#8221;链接，按照图示的方法创建一个用户以及对应的数据库，并赋予</p><p>单个数据库管理权限，下面的资源限制则是按照实际情况填写就可以了，一般自用的情况下那个区域是可以保留</p><p>默认的，最后再点击右下角的&#8220;执行&#8221;按钮，相应的用户以及数据库就创建好了。</p><p><img style="border: 0px currentColor; border-image: none;" alt="windows环境下wampserver的配置教程&#8212;&#8212;超级详细 - youyou - youyou" src="http://image67.360doc.com/DownloadImg/2013/11/1309/36660077_17.jpg" /><br /></p><p>&nbsp;</p><p>三、Apache的配置<br />&nbsp; &nbsp;&nbsp; &nbsp;虽说wampserver已经帮我们集成好了Apache，但是有些细节的东西还是需要我们自己去完善的，下面就让我们</p><p>来一一对wampserver自带的Apache进行完善。<br />&nbsp; &nbsp;&nbsp; &nbsp;1、刚装完wampserver之后，有没有性子比较急的朋友们可能会尝试通过外网访问我们配置好的wampserver服务器，</p><p>但是会发现通过外网访问会提示权限不够，这是为什么呢？是因为wampserver默认是只允许127.0.0.1访问的，也</p><p>就是只允许本机访问，怎么修改呢？依次点击<img width="55" height="26" style="border: 0px currentColor; border-image: none;" alt="windows环境下wampserver的配置教程&#8212;&#8212;超级详细 - youyou - youyou" src="http://image67.360doc.com/DownloadImg/2013/11/1309/36660077_10.jpg" />&#8212;Apache&#8212;httpd.conf，找到如图所示的地方，大概在第234</p><p>行，把&#8220;Deny from all&#8221;删掉，再把&#8220;Allow from 127.0.0.1&#8221;改成&#8220;Allow from all&#8221;，就可以了。</p><p><img style="border: 0px currentColor; border-image: none;" alt="windows环境下wampserver的配置教程&#8212;&#8212;超级详细 - youyou - youyou" src="http://image67.360doc.com/DownloadImg/2013/11/1309/36660077_18.jpg" /><br /></p><p><br /></p><p>&nbsp; &nbsp;&nbsp; &nbsp;2、继续搜索，找到如图所示的两个地方（分别在大约第190行和第225行），分别把&#8220;AllowOverride None&#8221;改成</p><p>&#8220;AllowOverride All&#8221;（这一步操作是针对使用了URL重写功能的朋友，如果没有用到的话这步建议不要做修改，因为</p><p>改了这个之后Apache的安全性会略微有所下降。）</p><br /><p>&nbsp; &nbsp;&nbsp; &nbsp;3、开启URL重写功能，当然咯，如果大家觉得URL重写功能没有必要的话，这个可以直接无视，但是如果开了</p><p>的话，上面的第二条就必须做一下了，否则很容易造成错误。按照上面的方法打开httpd.conf文件，找到</p><p>#LoadModule rewrite_module modules/mod_rewrite.so，然后把前面的&#8220;#&#8221;删掉，就可以了，当然咯，如果想要这</p><p>个修改生效的话，还需要立即重启一下apache服务。</p><p>&nbsp; &nbsp;&nbsp; &nbsp;4、相信大家还记得上面更改wampserver的&#8220;www 目录&#8221;指向路径的方法吧？我曾经说这个方法只是改了</p><p>wamp中&#8220;www 目录&#8221;这个链接而已，那如果要真正修改，我们应该怎么改呢？很简单，打开httpd.conf，寻找</p><p>&#8220;DocumentRoot&#8221;大概在第178行，把后面的值改成我们实际网站需要的路径，再寻找</p><p>&#8220;&lt;Directory "c:/wamp/www/"&gt;&#8221;，同样把后面的值改成我们网站存放的实际地址，就OK了。</p><br /><p>四、配置PHP &#8212;&#8212;重要</p><p>&nbsp; &nbsp;&nbsp; &nbsp;PHP的配置比较简单，只需要进行一些基本设置的修改就可以了，依次点击<img width="55" height="26" style="border: 0px currentColor; border-image: none;" alt="windows环境下wampserver的配置教程&#8212;&#8212;超级详细 - youyou - youyou" src="http://image67.360doc.com/DownloadImg/2013/11/1309/36660077_10.jpg" />&#8212;PHP&#8212;php.ini，</p><p>找到这三个地方：short_open_tag = Off（是否允许使用 PHP 代码开始标志的缩写形式（&lt;? ?&gt; ）。）；</p><p>memory_limit = 128M（最大使用内存的大小）；</p><p>upload_max_filesize = 2M（上传附件的最大值），</p><p>第一个需要改成on，否则的话很多php程序都会运行不了，后面的两项就按照大家的实际需求更改就行了。</p><br /><p>五、结语</p><p>&nbsp; &nbsp;&nbsp; &nbsp;到此为止，我们wampserver的配置就可以暂告一段落了，现在大家可以上传一套PHP程序运行一下，</p><p>体验成功的快乐了，当然，wampserver及其附加组件的功能操作远不止是如此简单，本文的写作目的只</p><p>是为了让大家能够顺利使用wampserver搭建一个PHP服务器的环境，接下来就需要大家自己慢慢琢磨啦O(&#8745;_&#8745;)O</p><img src ="http://www.cppblog.com/xkjy3000/aggbug/214821.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xkjy3000/" target="_blank">虚空骄阳</a> 2017-04-08 17:32 <a href="http://www.cppblog.com/xkjy3000/archive/2017/04/08/214821.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MySql 5.6.17 x64编译错误</title><link>http://www.cppblog.com/xkjy3000/archive/2016/04/27/213376.html</link><dc:creator>虚空骄阳</dc:creator><author>虚空骄阳</author><pubDate>Wed, 27 Apr 2016 07:14:00 GMT</pubDate><guid>http://www.cppblog.com/xkjy3000/archive/2016/04/27/213376.html</guid><wfw:comment>http://www.cppblog.com/xkjy3000/comments/213376.html</wfw:comment><comments>http://www.cppblog.com/xkjy3000/archive/2016/04/27/213376.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xkjy3000/comments/commentRss/213376.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xkjy3000/services/trackbacks/213376.html</trackback:ping><description><![CDATA[vs2013下，配置好MySql5.6.17 x64后，编译报一堆link 2019错误。解决方法如下：<br /><div>1、将编译平台改为x64<br /><img src="http://www.cppblog.com/images/cppblog_com/xkjy3000/vs2013_mysql_x64.png" width="848" height="595" alt="" /><br />2、将libmysql.dll 拷贝到对应x64编译生成的目录下<br />搞定...</div><img src ="http://www.cppblog.com/xkjy3000/aggbug/213376.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xkjy3000/" target="_blank">虚空骄阳</a> 2016-04-27 15:14 <a href="http://www.cppblog.com/xkjy3000/archive/2016/04/27/213376.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MySql命令大全</title><link>http://www.cppblog.com/xkjy3000/archive/2016/04/27/213375.html</link><dc:creator>虚空骄阳</dc:creator><author>虚空骄阳</author><pubDate>Wed, 27 Apr 2016 05:38:00 GMT</pubDate><guid>http://www.cppblog.com/xkjy3000/archive/2016/04/27/213375.html</guid><wfw:comment>http://www.cppblog.com/xkjy3000/comments/213375.html</wfw:comment><comments>http://www.cppblog.com/xkjy3000/archive/2016/04/27/213375.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xkjy3000/comments/commentRss/213375.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xkjy3000/services/trackbacks/213375.html</trackback:ping><description><![CDATA[<h1>1、连接Mysql</h1><div id="comment">格式： mysql -h主机地址 -u用户名 －p用户密码<br /><br /><strong>1、连接到本机上的MYSQL。</strong><br />首先打开DOS窗口，然后进入目录mysql\bin，再键入命令mysql -u root -p，回车后提示你输密码.注意用户名前可以有空格也可以没有空格，但是密码前必须没有空格，否则让你重新输入密码。<br /><br />如果刚安装好MYSQL，超级用户root是没有密码的，故直接回车即可进入到MYSQL中了，MYSQL的提示符是： mysql&gt;<br /><br /><strong>2、连接到远程主机上的MYSQL。</strong>假设远程主机的IP为：110.110.110.110，用户名为root,密码为abcd123。则键入以下命令：<br />&nbsp;&nbsp;&nbsp; mysql -h110.110.110.110 -u root -p 123;（注:u与root之间可以不用加空格，其它也一样）<br /><br /><strong>3、退出MYSQL命令</strong>： exit （回车）</div><div>&nbsp;</div><div><h1>2、修改密码</h1><div id="comment">格式：mysqladmin -u用户名 -p旧密码 password 新密码<br /><br /><strong>1、给root加个密码ab12。</strong><br />首先在DOS下进入目录mysql\bin，然后键入以下命令<br />&nbsp;&nbsp;&nbsp; mysqladmin -u root -password ab12<br />注：因为开始时root没有密码，所以-p旧密码一项就可以省略了。<br /><br /><strong>2、再将root的密码改为djg345。</strong><br />&nbsp;&nbsp;&nbsp; mysqladmin -u root -p ab12 password djg345</div><div><h1>3、增加新用户</h1><div id="comment">注意：和上面不同，下面的因为是MYSQL环境中的命令，所以后面都带一个分号作为命令结束符<br /><br />格式：grant select on 数据库.* to 用户名@登录主机 identified by &#8220;密码&#8221;<br /><br /><strong>1、增加一个用户test1密码为abc，让他可以在任何主机上登录，并对所有数据库有查询、插入、修改、删除的权限。首先用root用户连入MYSQL，然后键入以下命令：</strong><br />&nbsp;&nbsp;&nbsp; grant select,insert,update,delete on *.* to [email=test1@&#8221;%]test1@&#8221;%[/email]&#8221; Identified by &#8220;abc&#8221;;<br /><br />但增加的用户是十分危险的，你想如某个人知道test1的密码，那么他就可以在internet上的任何一台电脑上登录你的mysql数据库并对你的数据可以为所欲为了，解决办法见2。<br /><br /><strong>2、增加一个用户test2密码为abc,让他只可以在localhost上登录，并可以对数据库mydb进行查询、插入、修改、删除的操作（localhost指本地主机，即MYSQL数据库所在的那台主机）</strong>，这样用户即使用知道test2的密码，他也无法从internet上直接访问数据库，只能通过MYSQL主机上的web页来访问了。<br />&nbsp;&nbsp;&nbsp; grant select,insert,update,delete on mydb.* to [email=test2@localhost]test2@localhost[/email] identified by &#8220;abc&#8221;;<br /><br />如果你不想test2有密码，可以再打一个命令将密码消掉。<br />&nbsp;&nbsp;&nbsp; grant select,insert,update,delete on mydb.* to [email=test2@localhost]test2@localhost[/email] identified by &#8220;&#8221;;</div><div>&nbsp;</div><div><h1>4.1 创建数据库</h1><div id="comment">注意：创建数据库之前要先连接Mysql服务器<br /><br />命令：create database &lt;数据库名&gt;<br /><br /><strong>例1：建立一个名为xhkdb的数据库</strong><br />&nbsp; &nbsp;mysql&gt; create database xhkdb;<br /><br /><strong>例2：创建数据库并分配用户</strong><br /><br />&#9312;CREATE DATABASE 数据库名;<br /><br />&#9313;GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER ON 数据库名.* TO 数据库名@localhost IDENTIFIED BY '密码';<br /><br />&#9314;SET PASSWORD FOR&nbsp;'数据库名'@'localhost' = OLD_PASSWORD('密码');<br /><br />依次执行3个命令完成数据库创建。注意：中文 &#8220;密码&#8221;和&#8220;数据库&#8221;是户自己需要设置的。</div><div><h1>4.2 显示数据库</h1><div id="comment">命令：show databases （注意：最后有个s）<br />mysql&gt; show databases;<br /><br />注意：为了不再显示的时候乱码，要修改数据库默认编码。以下以GBK编码页面为例进行说明：<br /><br /><strong>1、修改MYSQL的配置文件：</strong>my.ini里面修改default-character-set=gbk<br /><strong>2、代码运行时修改：</strong><br />&nbsp; &nbsp;&#9312;Java代码：jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=gbk<br />&nbsp; &nbsp;&#9313;PHP代码：header("Content-Type:text/html;charset=gb2312");<br />&nbsp; &nbsp;&#9314;C语言代码：int mysql_set_character_set( MYSQL * mysql, char * csname)；<br />该函数用于为当前连接设置默认的字符集。字符串csname指定了1个有效的字符集名称。连接校对成为字符集的默认校对。该函数的工作方式与SET NAMES语句类似，但它还能设置mysql- &gt; charset的值，从而影响了由mysql_real_escape_string() 设置的字符集。</div><div><h1>4.3 删除数据库</h1><div id="comment">命令：drop database &lt;数据库名&gt;<br />例如：删除名为 xhkdb的数据库<br />mysql&gt; drop database xhkdb;<br /><br />例子1：删除一个已经确定存在的数据库<br />&nbsp; &nbsp;mysql&gt; drop database drop_database;<br />&nbsp; &nbsp;Query OK, 0 rows affected (0.00 sec)<br /><br />例子2：删除一个不确定存在的数据库<br />&nbsp; &nbsp;mysql&gt; drop database drop_database;<br />&nbsp; &nbsp;ERROR 1008 (HY000): Can't drop database 'drop_database'; database doesn't exist<br />&nbsp; &nbsp; &nbsp; //发生错误，不能删除'drop_database'数据库，该数据库不存在。<br />&nbsp; &nbsp;mysql&gt; drop database if exists drop_database;<br />&nbsp; &nbsp;Query OK, 0 rows affected, 1 warning (0.00 sec)//产生一个警告说明此数据库不存在<br />&nbsp; &nbsp;mysql&gt; create database drop_database;<br />&nbsp; &nbsp;Query OK, 1 row affected (0.00 sec)<br />&nbsp; &nbsp;mysql&gt; drop database if exists drop_database;//if exists 判断数据库是否存在，不存在也不产生错误<br />&nbsp; &nbsp;Query OK, 0 rows affected (0.00 sec)</div><div><h1>4.4 连接数据库</h1><div id="comment">命令： use &lt;数据库名&gt;<br /><br />例如：如果xhkdb数据库存在，尝试存取它：<br />&nbsp; &nbsp;mysql&gt; use xhkdb;<br />屏幕提示：Database changed<br /><br /><strong>use 语句可以通告MySQL把db_name数据库作为默认（当前）数据库使用，用于后续语句。</strong>该数据库保持为默认数据库，直到语段的结尾，或者直到发布一个不同的USE语句：<br />&nbsp; &nbsp;mysql&gt; USE db1;<br />&nbsp; &nbsp;mysql&gt; SELECT COUNT(*) FROM mytable;&nbsp;&nbsp; # selects from db1.mytable<br />&nbsp; &nbsp;mysql&gt; USE db2;<br />&nbsp; &nbsp;mysql&gt; SELECT COUNT(*) FROM mytable;&nbsp;&nbsp; # selects from db2.mytable<br /><br /><strong>使用USE语句为一个特定的当前的数据库做标记，不会阻碍您访问其它数据库中的表。</strong>下面的例子可以从db1数据库访问作者表，并从db2数据库访问编辑表：<br />&nbsp; &nbsp;mysql&gt; USE db1;<br />&nbsp; &nbsp;mysql&gt; SELECT author_name,editor_name FROM author,db2.editor<br />&nbsp; &nbsp; &nbsp; &nbsp;-&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WHERE author.editor_id = db2.editor.editor_id;<br /><br />USE语句被设立出来，用于与Sybase相兼容。<br /><br />有些网友问到，连接以后怎么退出。其实，不用退出来，use 数据库后，使用show databases就能查询所有数据库，如果想跳到其他数据库，用<br />&nbsp; &nbsp;use 其他数据库名字<br />就可以了。</div><div><h1>4.5 当前选择的数据库</h1><div id="comment">命令：mysql&gt; select database();<br /><br />MySQL中SELECT命令类似于其他编程语言里的print或者write，你可以用它来显示一个字符串、数字、数学表达式的结果等等。如何使用MySQL中SELECT命令的特殊功能？<br /><br /><strong>1.显示MYSQL的版本</strong><br />mysql&gt; select version();&nbsp;<br />+-----------------------+&nbsp;<br />| version()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;<br />+-----------------------+&nbsp;<br />| 6.0.4-alpha-community |&nbsp;<br />+-----------------------+&nbsp;<br />1 row in set (0.02 sec)&nbsp;<br /><br /><strong>2. 显示当前时间</strong><br />mysql&gt; select now();&nbsp;<br />+---------------------+&nbsp;<br />| now()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;<br />+---------------------+&nbsp;<br />| 2009-09-15 22:35:32 |&nbsp;<br />+---------------------+&nbsp;<br />1 row in set (0.04 sec)&nbsp;<br /><br /><strong>3. 显示年月日</strong><br />SELECT DAYOFMONTH(CURRENT_DATE);&nbsp;<br />+--------------------------+&nbsp;<br />| DAYOFMONTH(CURRENT_DATE) |&nbsp;<br />+--------------------------+&nbsp;<br />|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 15 |&nbsp;<br />+--------------------------+&nbsp;<br />1 row in set (0.01 sec)&nbsp;<br />&nbsp;&nbsp;<br />SELECT MONTH(CURRENT_DATE);&nbsp;<br />+---------------------+&nbsp;<br />| MONTH(CURRENT_DATE) |&nbsp;<br />+---------------------+&nbsp;<br />|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9 |&nbsp;<br />+---------------------+&nbsp;<br />1 row in set (0.00 sec)&nbsp;<br />&nbsp;&nbsp;<br />SELECT YEAR(CURRENT_DATE);&nbsp;<br />+--------------------+&nbsp;<br />| YEAR(CURRENT_DATE) |&nbsp;<br />+--------------------+&nbsp;<br />|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2009 |&nbsp;<br />+--------------------+&nbsp;<br />1 row in set (0.00 sec)&nbsp;<br /><br /><strong>4. 显示字符串</strong><br />mysql&gt; SELECT "welecome to my blog!";&nbsp;<br />+----------------------+&nbsp;<br />| welecome to my blog! |&nbsp;<br />+----------------------+&nbsp;<br />| welecome to my blog! |&nbsp;<br />+----------------------+&nbsp;<br />1 row in set (0.00 sec)&nbsp;<br /><br /><strong>5. 当计算器用</strong><br />select ((4 * 4) / 10 ) + 25;&nbsp;<br />+----------------------+&nbsp;<br />| ((4 * 4) / 10 ) + 25 |&nbsp;<br />+----------------------+&nbsp;<br />|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 26.60 |&nbsp;<br />+----------------------+&nbsp;<br />1 row in set (0.00 sec)&nbsp;<br /><br /><strong>6. 串接字符串</strong><br />select CONCAT(f_name, " ", l_name)&nbsp;<br />AS Name&nbsp;<br />from employee_data&nbsp;<br />where title = 'Marketing Executive';&nbsp;<br />+---------------+&nbsp;<br />| Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;<br />+---------------+&nbsp;<br />| Monica Sehgal |&nbsp;<br />| Hal Simlai&nbsp;&nbsp;&nbsp; |&nbsp;<br />| Joseph Irvine |&nbsp;<br />+---------------+&nbsp;<br />3 rows in set (0.00 sec)&nbsp;<br />注意：这里用到CONCAT()函数，用来把字符串串接起来。另外，我们还用到以前学到的AS给结果列'CONCAT(f_name, " ", l_name)'起了个假名。</div><div><h1>5.1 创建数据表</h1><div id="comment">命令：create table &lt;表名&gt; ( &lt;字段名1&gt; &lt;类型1&gt; [,..&lt;字段名n&gt; &lt;类型n&gt;]);<br /><br />例如，建立一个名为MyClass的表，<br /><table style="width: 583px;" border="0" cellspacing="0" cellpadding="0"><tbody><tr><td>字段名</td><td>数字类型</td><td>数据宽度</td><td>是否为空</td><td>是否主键</td><td>自动增加</td><td>默认值</td></tr><tr><td>id</td><td>int</td><td>4</td><td>否</td><td>primary key</td><td>auto_increment</td><td>&nbsp;</td></tr><tr><td>name</td><td>char</td><td>20</td><td>否</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr><tr><td>sex</td><td>int</td><td>4</td><td>否</td><td>&nbsp;</td><td>&nbsp;</td><td>0</td></tr><tr><td>degree</td><td>double</td><td>16</td><td>是</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr></tbody></table><br />mysql&gt;&nbsp;<strong>create</strong>&nbsp;<strong>table</strong>&nbsp;MyClass(<br />&gt; id int(4) not null&nbsp;<strong>primary key auto_increment</strong>,<br />&gt; name char(20) not null,<br />&gt; sex int(4) not null<strong>&nbsp;default</strong>&nbsp;'0',<br />&gt; degree double(16,2));</div><div><h1>5.3 删除数据表</h1><div id="comment">命令：drop table &lt;表名&gt;<br /><br />例如：删除表名为 MyClass 的表<br />&nbsp; &nbsp;mysql&gt; drop table MyClass;<br /><br />DROP TABLE用于取消一个或多个表。您必须有每个表的DROP权限。所有的表数据和表定义会被取消，所以使用本语句要小心！<br /><br />注意：对于一个带分区的表，DROP TABLE会永久性地取消表定义，取消各分区，并取消储存在这些分区中的所有数据。DROP TABLE还会取消与被取消的表有关联的分区定义（.par）文件。<br /><br />对与不存在的表，使用IF EXISTS用于防止错误发生。当使用IF EXISTS时，对于每个不存在的表，会生成一个NOTE。<br /><br />RESTRICT和CASCADE可以使分区更容易。目前，RESTRICT和CASCADE不起作用。</div><div><h1>5.4 表插入数据</h1><div id="comment">命令：insert into &lt;表名&gt; [( &lt;字段名1&gt;[,..&lt;字段名n &gt; ])] values ( 值1 )[, ( 值n )]<br /><br />例如：往表 MyClass中插入二条记录, 这二条记录表示：编号为1的名为Tom的成绩为96.45, 编号为2 的名为Joan 的成绩为82.99， 编号为3 的名为Wang 的成绩为96.5。<br />&nbsp; &nbsp;mysql&gt; insert into MyClass values(1,'Tom',96.45),(2,'Joan',82.99), (2,'Wang', 96.59);<br /><br />注意：insert into每次只能向表中插入一条记录。</div><div><h1>5.5 查询表中的数据</h1><div id="comment"><strong>1)、查询所有行</strong><br />命令： select &lt;字段1，字段2，...&gt; from &lt; 表名 &gt; where &lt; 表达式 &gt;<br />例如：查看表 MyClass 中所有数据<br />&nbsp; &nbsp;mysql&gt; select * from MyClass;<br /><br /><strong>2）、查询前几行数据</strong><br />例如：查看表 MyClass 中前2行数据<br />mysql&gt; select * from MyClass order by id limit 0,2;<br /><br />select一般配合where使用，以查询更精确更复杂的数据。</div><div><h1>5.6 删除表中数据</h1><div>&nbsp;</div><div>&nbsp;</div><div>&nbsp;</div><div id="comment">命令：delete from 表名 where 表达式<br /><br />例如：删除表 MyClass中编号为1 的记录<br />mysql&gt; delete from MyClass where id=1;<br /><br />下面是一个删除数据前后表的对比。<br /><table><tbody><tr><th>FirstName</th><th>LastName</th><th>Age</th></tr><tr><td>Peter</td><td>Griffin</td><td>35</td></tr><tr><td>Glenn</td><td>Quagmire</td><td>33</td></tr></tbody></table><br />下面以PHP代码为例删除 "Persons" 表中所有 LastName='Griffin' 的记录：<br /><pre>&lt;?php     $con = mysql_connect("localhost","peter","abc123");     if (!$con)     {       die('Could not connect: ' . mysql_error());     }     mysql_select_db("my_db", $con);     mysql_query("DELETE FROM Persons WHERE LastName='Griffin'"); mysql_close($con);  ?&gt;</pre>在这次删除之后，表是这样的：<br /><table><tbody><tr><th>FirstName</th><th>LastName</th><th>Age</th></tr><tr><td>Glenn</td><td>Quagmire</td><td>33<br /><br /></td></tr></tbody></table><h1>5.7 修改表中数据</h1><div id="comment">语法：update 表名 set 字段=新值,&#8230; where 条件<br />&nbsp; &nbsp;mysql&gt; update MyClass set name='Mary' where id=1;<br /><br /><strong>例子1：单表的MySQL UPDATE语句：</strong><br />&nbsp; &nbsp;UPDATE [LOW_PRIORITY] [IGNORE] tbl_name&nbsp;SET col_name1=expr1 [, col_name2=expr2 ...]&nbsp;[WHERE where_definition]&nbsp;[ORDER BY ...]&nbsp;[LIMIT row_count]<br /><br /><strong>例子2：多表的UPDATE语句：</strong><br />UPDATE [LOW_PRIORITY] [IGNORE] table_references&nbsp;SET col_name1=expr1 [, col_name2=expr2 ...]&nbsp;[WHERE where_definition]<br /><br />UPDATE语法可以用新值更新原有表行中的各列。SET子句指示要修改哪些列和要给予哪些值。WHERE子句指定应更新哪些行。如果没有WHERE子句，则更新所有的行。如果指定了ORDER BY子句，则按照被指定的顺序对行进行更新。LIMIT子句用于给定一个限值，限制可以被更新的行的数目。</div><div>&nbsp;</div><div><h1>5.8 增加字段</h1><div id="comment">命令：<strong>alter table</strong>&nbsp;表名&nbsp;<strong>add</strong>字段 类型 其他;<br />例如：在表MyClass中添加了一个字段passtest，类型为int(4)，默认值为0<br />&nbsp; &nbsp;mysql&gt;&nbsp;<strong>alter table</strong>&nbsp;MyClass&nbsp;<strong>add&nbsp;</strong>passtest&nbsp;<strong>int(</strong>4<strong>) default</strong>&nbsp;'0'<br /><br /><strong>加索引</strong><br />&nbsp; &nbsp;mysql&gt; alter table 表名 add index 索引名 (字段名1[，字段名2 &#8230;]);<br />例子： mysql&gt; alter table employee add index emp_name (name);<br /><br /><strong>加主关键字的索引</strong><br />&nbsp; mysql&gt; alter table 表名 add primary key (字段名);<br />例子： mysql&gt; alter table employee add primary key(id);<br /><br /><strong>加唯一限制条件的索引</strong><br />&nbsp; &nbsp;mysql&gt; alter table 表名 add unique 索引名 (字段名);<br />例子： mysql&gt; alter table employee add unique emp_name2(cardnumber);<br /><br /><strong>删除某个索引</strong><br />&nbsp; &nbsp;mysql&gt; alter table 表名 drop index 索引名;<br />例子： mysql&gt;alter table employee drop index emp_name;<br /><br /><strong>增加字段：</strong><br />mysql&gt; ALTER TABLE table_name ADD field_name field_type;<br /><br /><strong>修改原字段名称及类型：</strong><br />mysql&gt; ALTER TABLE table_name CHANGE old_field_name new_field_name field_type;<br /><br /><strong>删除字段：</strong><br />MySQL ALTER TABLE table_name DROP field_name;</div><div><h1>5.9 修改表名</h1><div id="comment">命令：rename table 原表名 to 新表名;<br /><br />例如：在表MyClass名字更改为YouClass<br />&nbsp; &nbsp;mysql&gt; rename table MyClass to YouClass;<br /><br />当你执行 RENAME 时，你不能有任何锁定的表或活动的事务。你同样也必须有对原初表的 ALTER 和 DROP 权限，以及对新表的 CREATE 和 INSERT 权限。<br /><br />如果在多表更名中，MySQL 遭遇到任何错误，它将对所有被更名的表进行倒退更名，将每件事物退回到最初状态。<br /><br />RENAME TABLE 在 MySQL 3.23.23 中被加入。</div><div><h1>6、备份数据库</h1><div id="comment">命令在DOS的[url=file://\\mysql\\bin]\\mysql\\bin[/url]目录下执行<br /><br /><strong>1.导出整个数据库</strong><br />导出文件默认是存在mysql\bin目录下<br />&nbsp;&nbsp;&nbsp; mysqldump -u 用户名 -p 数据库名 &gt; 导出的文件名<br />&nbsp;&nbsp;&nbsp; mysqldump -u user_name -p123456 database_name &gt; outfile_name.sql<br /><br /><strong>2.导出一个表</strong><br />&nbsp;&nbsp;&nbsp; mysqldump -u 用户名 -p 数据库名 表名&gt; 导出的文件名<br />&nbsp;&nbsp;&nbsp; mysqldump -u user_name -p database_name table_name &gt; outfile_name.sql<br /><br /><strong>3.导出一个数据库结构</strong><br />&nbsp;&nbsp;&nbsp; mysqldump -u user_name -p -d &#8211;add-drop-table database_name &gt; outfile_name.sql<br />&nbsp;&nbsp;&nbsp; -d 没有数据 &#8211;add-drop-table 在每个create语句之前增加一个drop table<br /><br /><strong>4.带语言参数导出</strong><br />&nbsp;&nbsp;&nbsp; mysqldump -uroot -p &#8211;default-character-set=latin1 &#8211;set-charset=gbk &#8211;skip-opt database_name &gt; outfile_name.sql<br /><br />例如，将aaa库备份到文件back_aaa中：<br />　　[root@test1 root]# cd　/home/data/mysql<br />　　[root@test1 mysql]# mysqldump -u root -p --opt aaa &gt; back_aaa</div><div><h1>7.1 一个建库和建表的实例1</h1><div id="comment">drop database if exists school; //如果存在SCHOOL则删除<br />create database school; //建立库SCHOOL<br />use school; //打开库SCHOOL<br />create table teacher //建立表TEACHER<br />(<br />&nbsp;&nbsp;&nbsp; id int(3) auto_increment not null primary key,<br />&nbsp;&nbsp;&nbsp; name char(10) not null,<br />&nbsp;&nbsp;&nbsp; address varchar(50) default &#8216;深圳&#8217;,<br />&nbsp;&nbsp;&nbsp; year date<br />); //建表结束<br /><br />//以下为插入字段<br />insert into teacher values(&#8221;,&#8217;allen&#8217;,'大连一中&#8217;,'1976-10-10&#8242;);<br />insert into teacher values(&#8221;,&#8217;jack&#8217;,'大连二中&#8217;,'1975-12-23&#8242;);<br /><br />如果你在mysql提示符键入上面的命令也可以，但不方便调试。<br />1、你可以将以上命令原样写入一个文本文件中，假设为school.sql，然后复制到c:\\下，并在DOS状态进入目录[url=file://\\mysql\\bin]\\mysql\\bin[/url]，然后键入以下命令：<br />&nbsp;&nbsp;&nbsp; mysql -uroot -p密码 &lt; c:\\school.sql<br />如果成功，空出一行无任何显示；如有错误，会有提示。（以上命令已经调试，你只要将//的注释去掉即可使用）。<br /><br />2、或者进入命令行后使用 mysql&gt; source c:\\school.sql; 也可以将school.sql文件导入数据库中。<br /></div><h1>7.2 一个建库和建表的实例2</h1><div id="comment">drop database if exists school; //如果存在SCHOOL则删除<br />create database school; //建立库SCHOOL<br />use school; //打开库SCHOOL<br />create table teacher //建立表TEACHER<br />(<br />&nbsp; &nbsp; id int(3) auto_increment not null primary key,<br />&nbsp;&nbsp;&nbsp; name char(10) not null,<br />&nbsp;&nbsp;&nbsp; address varchar(50) default ''深圳'',<br />&nbsp;&nbsp;&nbsp; year date<br />); //建表结束<br /><br />//以下为插入字段<br />insert into teacher values('''',''glchengang'',''深圳一中'',''1976-10-10'');<br />insert into teacher values('''',''jack'',''深圳一中'',''1975-12-23'');<br /><br />注：在建表中<br />1、将ID设为长度为3的数字字段:int(3)；并让它每个记录自动加一:auto_increment；并不能为空:not null；而且让他成为主字段primary key。<br /><br />2、将NAME设为长度为10的字符字段<br /><br />3、将ADDRESS设为长度50的字符字段，而且缺省值为深圳。<br /><br />4、将YEAR设为日期字段。</div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div><img src ="http://www.cppblog.com/xkjy3000/aggbug/213375.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xkjy3000/" target="_blank">虚空骄阳</a> 2016-04-27 13:38 <a href="http://www.cppblog.com/xkjy3000/archive/2016/04/27/213375.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Cocos2d-x获取系统时间</title><link>http://www.cppblog.com/xkjy3000/archive/2014/07/21/207739.html</link><dc:creator>虚空骄阳</dc:creator><author>虚空骄阳</author><pubDate>Mon, 21 Jul 2014 15:04:00 GMT</pubDate><guid>http://www.cppblog.com/xkjy3000/archive/2014/07/21/207739.html</guid><wfw:comment>http://www.cppblog.com/xkjy3000/comments/207739.html</wfw:comment><comments>http://www.cppblog.com/xkjy3000/archive/2014/07/21/207739.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xkjy3000/comments/commentRss/207739.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xkjy3000/services/trackbacks/207739.html</trackback:ping><description><![CDATA[<div>//得到系统时间 &nbsp;</div><div>CCString* HelloWorld::getSystemTime() &nbsp;</div><div>{ &nbsp;</div><div>&nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; struct tm *tm; &nbsp;</div><div>#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32) &nbsp;</div><div>&nbsp; &nbsp; //win32平台 &nbsp;</div><div>&nbsp; &nbsp; time_t timep; &nbsp;</div><div>&nbsp; &nbsp; time(&amp;timep); &nbsp;</div><div>&nbsp; &nbsp; tm = localtime(&amp;timep); &nbsp;</div><div>#else &nbsp;</div><div>&nbsp; &nbsp; //android、ios平台 &nbsp;</div><div>&nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; struct cc_timeval now; &nbsp;</div><div>&nbsp; &nbsp; CCTime::gettimeofdayCocos2d(&amp;now, NULL); &nbsp;</div><div>&nbsp; &nbsp; tm = localtime(&amp;now.tv_sec); &nbsp;</div><div>#endif &nbsp;</div><div>&nbsp; &nbsp; int year = tm-&gt;tm_year + 1900; &nbsp;</div><div>&nbsp; &nbsp; int month = tm-&gt;tm_mon + 1; &nbsp;</div><div>&nbsp; &nbsp; int day = tm-&gt;tm_mday; &nbsp;</div><div>&nbsp; &nbsp; int hour=tm-&gt;tm_hour; &nbsp;</div><div>&nbsp; &nbsp; int min=tm-&gt;tm_min; &nbsp;</div><div>&nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; CCString *string=CCString::createWithFormat("%d-%d-%d %d:%d",year,month,day,hour,min); &nbsp;</div><div>&nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; return string; &nbsp;</div><div>&nbsp;&nbsp;</div><div>}</div><img src ="http://www.cppblog.com/xkjy3000/aggbug/207739.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xkjy3000/" target="_blank">虚空骄阳</a> 2014-07-21 23:04 <a href="http://www.cppblog.com/xkjy3000/archive/2014/07/21/207739.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>网络游戏常用类</title><link>http://www.cppblog.com/xkjy3000/archive/2014/05/27/207122.html</link><dc:creator>虚空骄阳</dc:creator><author>虚空骄阳</author><pubDate>Tue, 27 May 2014 13:38:00 GMT</pubDate><guid>http://www.cppblog.com/xkjy3000/archive/2014/05/27/207122.html</guid><wfw:comment>http://www.cppblog.com/xkjy3000/comments/207122.html</wfw:comment><comments>http://www.cppblog.com/xkjy3000/archive/2014/05/27/207122.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xkjy3000/comments/commentRss/207122.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xkjy3000/services/trackbacks/207122.html</trackback:ping><description><![CDATA[<div><strong style="color: red;">1、通用单例类<br /></strong><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: #008080; ">&nbsp;1</span>&nbsp;#ifndef&nbsp;_SINGLETON_H<br /><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;_SINGLETON_H<br /><span style="color: #008080; ">&nbsp;3</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;GameGeneric<br /><span style="color: #008080; ">&nbsp;5</span>&nbsp;{<br /><span style="color: #008080; ">&nbsp;6</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;template&lt;<span style="color: #0000FF; ">class</span>&nbsp;T&gt;<br /><span style="color: #008080; ">&nbsp;7</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;Singleton<br /><span style="color: #008080; ">&nbsp;8</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>:<br /><span style="color: #008080; ">10</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;T*&nbsp;instance()<br /><span style="color: #008080; ">11</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">12</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(&nbsp;!_instance&nbsp;)<br /><span style="color: #008080; ">13</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">14</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_instance&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;T;<br /><span style="color: #008080; ">15</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">16</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;_instance;<br /><span style="color: #008080; ">17</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">18</span>&nbsp;<br /><span style="color: #008080; ">19</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">protected</span>:<br /><span style="color: #008080; ">20</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;使用保护构造是为了让用户不能在栈上声明一个实例</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">21</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Singleton()&nbsp;{}<br /><span style="color: #008080; ">22</span>&nbsp;<br /><span style="color: #008080; ">23</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>:<br /><span style="color: #008080; ">24</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;T*&nbsp;_instance;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;实例静态指针</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">25</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;};<br /><span style="color: #008080; ">26</span>&nbsp;<br /><span style="color: #008080; ">27</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;静态实例指针初始化</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">28</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;template&nbsp;&lt;<span style="color: #0000FF; ">class</span>&nbsp;T&gt;&nbsp;T*&nbsp;Singleton&lt;T&gt;::_instance&nbsp;=&nbsp;NULL;<br /><span style="color: #008080; ">29</span>&nbsp;<br /><span style="color: #008080; ">30</span>&nbsp;}<br /><span style="color: #008080; ">31</span>&nbsp;<br /><span style="color: #008080; ">32</span>&nbsp;<span style="color: #0000FF; ">#endif</span></div><strong style="color: red;"><br /></strong><div>//使用的时候只需要单件类继承此模板即可。 &nbsp;&nbsp;</div><div>class Test : public Singleton&lt;Test &gt;{...};</div><strong style="color: red;"><br />2、</strong><span style="color: red;"><strong>Dll（so）动态加载<br /></strong></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: #008080; ">&nbsp;1</span>&nbsp;#ifndef&nbsp;__LIB_DEF_H_<br /><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;__LIB_DEF_H_<br /><span style="color: #008080; ">&nbsp;3</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;GameGeneric&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;5</span>&nbsp;{&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;6</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;DLL对象创建辅助类&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;template&lt;<span style="color: #0000FF; ">const</span>&nbsp;TCHAR*&amp;&nbsp;szFileName&gt;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;8</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;DllApi<br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">10</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>:<br /><span style="color: #008080; ">11</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;BOOL&nbsp;Load()<br /><span style="color: #008080; ">12</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">13</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(&nbsp;!m_h&nbsp;)<br /><span style="color: #008080; ">14</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">15</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_h&nbsp;=&nbsp;::LoadLibrary(szFileName);<br /><span style="color: #008080; ">16</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">17</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;m_h&nbsp;!=&nbsp;NULL;<br /><span style="color: #008080; ">18</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">19</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;Unload()<br /><span style="color: #008080; ">20</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">21</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(&nbsp;m_h&nbsp;)<br /><span style="color: #008080; ">22</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">23</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::FreeLibrary(m_h);<br /><span style="color: #008080; ">24</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">25</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_h&nbsp;=&nbsp;NULL;<br /><span style="color: #008080; ">26</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br /><span style="color: #008080; ">27</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">protected</span>:&nbsp;&nbsp;<br /><span style="color: #008080; ">28</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;HMODULE&nbsp;m_h;&nbsp;&nbsp;<br /><span style="color: #008080; ">29</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">30</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;template&lt;<span style="color: #0000FF; ">const</span>&nbsp;TCHAR*&amp;&nbsp;szFileName&gt;&nbsp;HMODULE&nbsp;DllApi&lt;szFileName&gt;::m_h;&nbsp;&nbsp;<br /><span style="color: #008080; ">31</span>&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">32</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">库文件前后缀&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">33</span>&nbsp;<span style="color: #008000; "></span>#ifdef&nbsp;WIN32&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">34</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;__DLL_PREFIX&nbsp;&nbsp;&nbsp;&nbsp;_T("")&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">35</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;__DLL_SUFFIX&nbsp;&nbsp;&nbsp;&nbsp;_T(".dll")&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">36</span>&nbsp;<span style="color: #0000FF; ">#else</span>&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">37</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;__DLL_PREFIX&nbsp;&nbsp;&nbsp;&nbsp;_T("lib")&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">38</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;__DLL_SUFFIX&nbsp;&nbsp;&nbsp;&nbsp;_T(".so")&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">39</span>&nbsp;<span style="color: #0000FF; ">#endif</span>&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">40</span>&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">41</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;声明DLL文件名常量&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">42</span>&nbsp;<span style="color: #008000; "></span><span style="color: #0000FF; ">#define</span>&nbsp;DECLARE_DLL_FILE(module)&nbsp;extern&nbsp;"C"&nbsp;const&nbsp;TCHAR*&nbsp;module;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">43</span>&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">44</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;定义DLL文件名常量&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">45</span>&nbsp;<span style="color: #008000; "></span><span style="color: #0000FF; ">#if</span>&nbsp;!defined(_LIB)&nbsp;&amp;&amp;&nbsp;!defined(_USE_STATIC_LIB)&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">46</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;DEFINE_DLL_FILE(module)&nbsp;extern&nbsp;"C"&nbsp;const&nbsp;TCHAR*&nbsp;module&nbsp;=&nbsp;_T("./")""__DLL_PREFIX""_T(#module)""__DLL_SUFFIX;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">47</span>&nbsp;<span style="color: #0000FF; ">#else</span>&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">48</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;DEFINE_DLL_FILE(module)&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">49</span>&nbsp;<span style="color: #0000FF; ">#endif</span>&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">50</span>&nbsp;}&nbsp;&nbsp;<br /><span style="color: #008080; ">51</span>&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">52</span>&nbsp;<span style="color: #0000FF; ">#endif</span></div><span style="color: red;"><strong><br /></strong></span><div>本例中使用了LoadLibrary，是windows的实现方法，在后面平台相关处理中，将linux的函数封装，和windows同名。</div><div>此模板使用方法很简单:</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"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">#if</span>&nbsp;defined(_LIB)&nbsp;||&nbsp;defined(_USE_STATIC_LIB)&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;静态库版本</span><br /><span style="color: #008080; ">&nbsp;2</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#ifndef&nbsp;_LUA_ENGINE_API<br /><span style="color: #008080; ">&nbsp;3</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;_LUA_ENGINE_API&nbsp;IMPORT_API<br /><span style="color: #008080; ">&nbsp;4</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#pragma&nbsp;comment(lib,&nbsp;&nbsp;MAKE_LIB_NAME(LuaEngine))<br /><span style="color: #008080; ">&nbsp;5</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">#endif</span><br /><span style="color: #008080; ">&nbsp;6</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;7</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_LUA_ENGINE_API&nbsp;ILuaEngine*&nbsp;GlobalLuaEngine();<br /><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #0000FF; ">#else</span><br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DECLARE_DLL_FILE(LuaEngine);<br /><span style="color: #008080; ">10</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;GlobalLuaEngine&nbsp;:&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;DllApi&lt;LuaEngine&gt;<br /><span style="color: #008080; ">11</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">12</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;typedef&nbsp;ILuaEngine*&nbsp;(*CREATE_PROC)();<br /><span style="color: #008080; ">13</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ILuaEngine*&nbsp;m_p;<br /><span style="color: #008080; ">14</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>:<br /><span style="color: #008080; ">15</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GlobalLuaEngine()&nbsp;:&nbsp;m_p(NULL)<br /><span style="color: #008080; ">16</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">17</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Load();<br /><span style="color: #008080; ">18</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;CREATE_PROC&nbsp;func;<br /><span style="color: #008080; ">19</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(func&nbsp;==&nbsp;NULL)&nbsp;func&nbsp;=&nbsp;(CREATE_PROC)::GetProcAddress(m_h,&nbsp;"GlobalLuaEngine");<br /><span style="color: #008080; ">20</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(func&nbsp;!=&nbsp;NULL)&nbsp;m_p&nbsp;=&nbsp;func();<br /><span style="color: #008080; ">21</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">22</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">operator</span>&nbsp;ILuaEngine*&nbsp;(){&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;m_p;&nbsp;}<br /><span style="color: #008080; ">23</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ILuaEngine*&nbsp;<span style="color: #0000FF; ">operator</span>&nbsp;-&gt;(){&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;m_p;&nbsp;}<br /><span style="color: #008080; ">24</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};<br /><span style="color: #008080; ">25</span>&nbsp;<span style="color: #0000FF; ">#endif</span></div><span style="color: red;"><strong><br /></strong></span><div>上面代码所示，LuaEngine是一个dll，我们在加载它的时候，使用了一个额外的类，在他的构造函数里面加载了共享库。而且在应用级上也与平台无关。</div><span style="color: red;"><strong><br />3、</strong></span><span style="color: red;"><strong>跨平台的若干处理<br /></strong></span><div>Windows的处理相当简单，只是定义一些简单的宏：</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"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;gwindef.h&nbsp;:&nbsp;windows开发定义文件&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #008000; "></span>#ifndef&nbsp;__G_WIN_DEF_H_&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;__G_WIN_DEF_H_&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;4</span>&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;5</span>&nbsp;#include&nbsp;&lt;windows.h&gt;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;6</span>&nbsp;#include&nbsp;&lt;process.h&gt;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;7</span>&nbsp;#include&nbsp;&lt;tchar.h&gt;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;8</span>&nbsp;#include&nbsp;&lt;unknwn.h&gt;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;#include&nbsp;&lt;stdio.h&gt;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">10</span>&nbsp;#include&nbsp;&lt;stdlib.h&gt;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">11</span>&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">12</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;SYS_API&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WINAPI&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">13</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;STD_CALL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__stdcall&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">14</span>&nbsp;<span style="color: #0000FF; ">#if</span>&nbsp;!defined(_LIB)&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">15</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;EXPORT_API&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;extern&nbsp;"C"&nbsp;_declspec(dllexport)&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">16</span>&nbsp;<span style="color: #0000FF; ">#else</span>&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">17</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;EXPORT_API&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;extern&nbsp;"C"&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">18</span>&nbsp;<span style="color: #0000FF; ">#endif</span>&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">19</span>&nbsp;<span style="color: #0000FF; ">#if</span>&nbsp;!defined(_LIB)&nbsp;&amp;&amp;&nbsp;!defined(_USE_STATIC_LIB)&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">20</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;IMPORT_API&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;extern&nbsp;"C"&nbsp;_declspec(dllimport)&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">21</span>&nbsp;<span style="color: #0000FF; ">#else</span>&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">22</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;IMPORT_API&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;extern&nbsp;"C"&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">23</span>&nbsp;<span style="color: #0000FF; ">#endif</span>&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">24</span>&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">25</span>&nbsp;<span style="color: #0000FF; ">#endif</span>&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;ndef&nbsp;__G_WIN_DEF_H_</span></div><span style="color: red;"><strong><br /></strong></span><div>为了开发的时候去除平台无关性，在Linux的开发中，我们需要做一些包装，使其在开发过程中和window代码一致，如下：</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"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp; 1</span>&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;glindef.h&nbsp;:&nbsp;linux开发定义文件</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;&nbsp;2</span>&nbsp;<span style="color: #008000; "></span>#ifndef&nbsp;__G_LIN_DEF_H_<br /><span style="color: #008080; ">&nbsp;&nbsp;3</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;__G_LIN_DEF_H_<br /><span style="color: #008080; ">&nbsp;&nbsp;4</span>&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;&nbsp;5</span>&nbsp;<span style="color: #008000; "></span>#include&nbsp;&lt;stdlib.h&gt;<br /><span style="color: #008080; ">&nbsp;&nbsp;6</span>&nbsp;#include&nbsp;&lt;stdio.h&gt;<br /><span style="color: #008080; ">&nbsp;&nbsp;7</span>&nbsp;#include&nbsp;&lt;<span style="color: #0000FF; ">string</span>.h&gt;<br /><span style="color: #008080; ">&nbsp;&nbsp;8</span>&nbsp;#include&nbsp;&lt;wchar.h&gt;<br /><span style="color: #008080; ">&nbsp;&nbsp;9</span>&nbsp;#include&nbsp;&lt;unistd.h&gt;<br /><span style="color: #008080; ">&nbsp;10</span>&nbsp;#include&nbsp;&lt;pthread.h&gt;<br /><span style="color: #008080; ">&nbsp;11</span>&nbsp;#include&nbsp;&lt;semaphore.h&gt;<br /><span style="color: #008080; ">&nbsp;12</span>&nbsp;#include&nbsp;&lt;errno.h&gt;<br /><span style="color: #008080; ">&nbsp;13</span>&nbsp;#include&nbsp;&lt;sys/times.h&gt;<br /><span style="color: #008080; ">&nbsp;14</span>&nbsp;#include&nbsp;&lt;time.h&gt;<br /><span style="color: #008080; ">&nbsp;15</span>&nbsp;#include&nbsp;&lt;dlfcn.h&gt;<br /><span style="color: #008080; ">&nbsp;16</span>&nbsp;#include&nbsp;&lt;sys/types.h&gt;<br /><span style="color: #008080; ">&nbsp;17</span>&nbsp;#include&nbsp;&lt;linux/unistd.h&gt;<br /><span style="color: #008080; ">&nbsp;18</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;19</span>&nbsp;inline&nbsp;_syscall0(pid_t,&nbsp;gettid)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;Using&nbsp;syscall(2)&nbsp;may&nbsp;be&nbsp;preferable;&nbsp;see&nbsp;intro(2)&nbsp;</span><span style="color: #008000; ">*/</span><br /><span style="color: #008080; ">&nbsp;20</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;21</span>&nbsp;#ifdef&nbsp;UNICODE<br /><span style="color: #008080; ">&nbsp;22</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;_T(str)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;L##str<br /><span style="color: #008080; ">&nbsp;23</span>&nbsp;<span style="color: #0000FF; ">#else</span><br /><span style="color: #008080; ">&nbsp;24</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;_T(str)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str<br /><span style="color: #008080; ">&nbsp;25</span>&nbsp;<span style="color: #0000FF; ">#endif</span><br /><span style="color: #008080; ">&nbsp;26</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;27</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;TRUE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1<br /><span style="color: #008080; ">&nbsp;28</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;FALSE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br /><span style="color: #008080; ">&nbsp;29</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;30</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;MAX_PATH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;256<br /><span style="color: #008080; ">&nbsp;31</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;32</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;SYS_API<br /><span style="color: #008080; ">&nbsp;33</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;STD_CALL<br /><span style="color: #008080; ">&nbsp;34</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;EXPORT_API&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;extern&nbsp;"C"<br /><span style="color: #008080; ">&nbsp;35</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;IMPORT_API&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;extern&nbsp;"C"<br /><span style="color: #008080; ">&nbsp;36</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;37</span>&nbsp;<span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;HRESULT&nbsp;常量定义</span><span style="color: #808080; "><br /></span><span style="color: #008080; ">&nbsp;38</span>&nbsp;<span style="color: #808080; "></span>typedef&nbsp;<span style="color: #0000FF; ">long</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HRESULT;<br /><span style="color: #008080; ">&nbsp;39</span>&nbsp;<span style="color: #0000FF; ">enum</span>&nbsp;HResult<br /><span style="color: #008080; ">&nbsp;40</span>&nbsp;{<br /><span style="color: #008080; ">&nbsp;41</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S_OK&nbsp;=&nbsp;((HRESULT)0x00000000),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">*&lt;&nbsp;成功，值为0&nbsp;</span><span style="color: #008000; ">*/</span><br /><span style="color: #008080; ">&nbsp;42</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S_FALSE&nbsp;=&nbsp;((HRESULT)0x00000001),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">*&lt;&nbsp;成功，但值为1&nbsp;</span><span style="color: #008000; ">*/</span><br /><span style="color: #008080; ">&nbsp;43</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;E_FAIL&nbsp;=&nbsp;_HRESULT_TYPEDEF_(0x80004005),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">*&lt;&nbsp;未定义错误&nbsp;</span><span style="color: #008000; ">*/</span><br /><span style="color: #008080; ">&nbsp;44</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;E_NOTIMPL&nbsp;=&nbsp;_HRESULT_TYPEDEF_(0x80004001),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">*&lt;&nbsp;接口未实现&nbsp;</span><span style="color: #008000; ">*/</span><br /><span style="color: #008080; ">&nbsp;45</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;E_OUTOFMEMORY&nbsp;=&nbsp;_HRESULT_TYPEDEF_(0x8007000E),&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">*&lt;&nbsp;内存不足&nbsp;</span><span style="color: #008000; ">*/</span><br /><span style="color: #008080; ">&nbsp;46</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;E_INVALIDARG&nbsp;=&nbsp;_HRESULT_TYPEDEF_(0x80070057),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">*&lt;&nbsp;无效参数&nbsp;</span><span style="color: #008000; ">*/</span><br /><span style="color: #008080; ">&nbsp;47</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;E_NOINTERFACE&nbsp;=&nbsp;_HRESULT_TYPEDEF_(0x80004002),&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">*&lt;&nbsp;接口不存在&nbsp;</span><span style="color: #008000; ">*/</span><br /><span style="color: #008080; ">&nbsp;48</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;E_POINTER&nbsp;=&nbsp;_HRESULT_TYPEDEF_(0x80004003),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">*&lt;&nbsp;无效指针&nbsp;</span><span style="color: #008000; ">*/</span><br /><span style="color: #008080; ">&nbsp;49</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;E_HANDLE&nbsp;=&nbsp;_HRESULT_TYPEDEF_(0x80070006),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">*&lt;&nbsp;无效句柄&nbsp;</span><span style="color: #008000; ">*/</span><br /><span style="color: #008080; ">&nbsp;50</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;E_ABORT&nbsp;=&nbsp;_HRESULT_TYPEDEF_(0x80004004),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">*&lt;&nbsp;操作被取消&nbsp;</span><span style="color: #008000; ">*/</span><br /><span style="color: #008080; ">&nbsp;51</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;E_ACCESSDENIED&nbsp;=&nbsp;_HRESULT_TYPEDEF_(0x80070005),&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">*&lt;&nbsp;访问拒绝&nbsp;</span><span style="color: #008000; ">*/</span><br /><span style="color: #008080; ">&nbsp;52</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;E_PENDING&nbsp;=&nbsp;_HRESULT_TYPEDEF_(0x8000000A),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">*&lt;&nbsp;操作被挂起&nbsp;</span><span style="color: #008000; ">*/</span><br /><span style="color: #008080; ">&nbsp;53</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;E_UNEXPECTED&nbsp;=&nbsp;_HRESULT_TYPEDEF_(0x8000FFFF)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">*&lt;&nbsp;未预料的错误&nbsp;</span><span style="color: #008000; ">*/</span><br /><span style="color: #008080; ">&nbsp;54</span>&nbsp;};<br /><span style="color: #008080; ">&nbsp;55</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;56</span>&nbsp;<span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;判定&nbsp;HRESULT&nbsp;值是否为成功值</span><span style="color: #808080; "><br /></span><span style="color: #008080; ">&nbsp;57</span>&nbsp;<span style="color: #808080; "></span><span style="color: #0000FF; ">#define</span>&nbsp;SUCCEEDED(Status)&nbsp;&nbsp;&nbsp;&nbsp;((HRESULT)(Status)&nbsp;&gt;=&nbsp;0)<br /><span style="color: #008080; ">&nbsp;58</span>&nbsp;<span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;判定&nbsp;HRESULT&nbsp;值是否为失败值</span><span style="color: #808080; "><br /></span><span style="color: #008080; ">&nbsp;59</span>&nbsp;<span style="color: #808080; "></span><span style="color: #0000FF; ">#define</span>&nbsp;FAILED(Status)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((HRESULT)(Status)&nbsp;&lt;&nbsp;0)<br /><span style="color: #008080; ">&nbsp;60</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;61</span>&nbsp;<span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;GUID&nbsp;类型定义</span><span style="color: #808080; "><br /></span><span style="color: #008080; ">&nbsp;62</span>&nbsp;<span style="color: #808080; "></span><span style="color: #008000; ">/*</span><span style="color: #008000; ">*<br /></span><span style="color: #008080; ">&nbsp;63</span>&nbsp;<span style="color: #008000; ">要定义&nbsp;GUID&nbsp;常量请使用&nbsp;GUID&nbsp;专门的生成工具（比如&nbsp;VS&nbsp;携带的&nbsp;guidgen.exe&nbsp;程序）来生成，<br /></span><span style="color: #008080; ">&nbsp;64</span>&nbsp;<span style="color: #008000; ">以确保其唯一性。<br /></span><span style="color: #008080; ">&nbsp;65</span>&nbsp;<span style="color: #008000; ">接口&nbsp;ID（IID）,&nbsp;类&nbsp;ID（CLSID）均为&nbsp;GUID&nbsp;的别名</span><span style="color: #008000; ">*/</span><br /><span style="color: #008080; ">&nbsp;66</span>&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;GUID<br /><span style="color: #008080; ">&nbsp;67</span>&nbsp;{<br /><span style="color: #008080; ">&nbsp;68</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;<span style="color: #0000FF; ">long</span>&nbsp;&nbsp;Data1;<br /><span style="color: #008080; ">&nbsp;69</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;<span style="color: #0000FF; ">short</span>&nbsp;Data2;<br /><span style="color: #008080; ">&nbsp;70</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;<span style="color: #0000FF; ">short</span>&nbsp;Data3;<br /><span style="color: #008080; ">&nbsp;71</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;&nbsp;Data4[8];<br /><span style="color: #008080; ">&nbsp;72</span>&nbsp;};<br /><span style="color: #008080; ">&nbsp;73</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;74</span>&nbsp;typedef&nbsp;GUID&nbsp;IID;<br /><span style="color: #008080; ">&nbsp;75</span>&nbsp;typedef&nbsp;GUID&nbsp;CLSID;<br /><span style="color: #008080; ">&nbsp;76</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;REFGUID&nbsp;const&nbsp;GUID&amp;<br /><span style="color: #008080; ">&nbsp;77</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;REFIID&nbsp;const&nbsp;IID&amp;<br /><span style="color: #008080; ">&nbsp;78</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;REFCLSID&nbsp;const&nbsp;CLSID&amp;<br /><span style="color: #008080; ">&nbsp;79</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;80</span>&nbsp;<span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;判断两个&nbsp;GUID&nbsp;是否相等（内联版）</span><span style="color: #808080; "><br /></span><span style="color: #008080; ">&nbsp;81</span>&nbsp;<span style="color: #808080; "></span>inline&nbsp;BOOL&nbsp;InlineIsEqualGUID(REFGUID&nbsp;rguid1,&nbsp;REFGUID&nbsp;rguid2)<br /><span style="color: #008080; ">&nbsp;82</span>&nbsp;{<br /><span style="color: #008080; ">&nbsp;83</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;((<span style="color: #0000FF; ">long</span>*)&amp;rguid1)[0]&nbsp;==&nbsp;((<span style="color: #0000FF; ">long</span>*)&amp;rguid2)[0]&nbsp;&amp;&amp;&nbsp;<br /><span style="color: #008080; ">&nbsp;84</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((<span style="color: #0000FF; ">long</span>*)&amp;rguid1)[1]&nbsp;==&nbsp;((<span style="color: #0000FF; ">long</span>*)&amp;rguid2)[1]&nbsp;&amp;&amp;<br /><span style="color: #008080; ">&nbsp;85</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((<span style="color: #0000FF; ">long</span>*)&amp;rguid1)[2]&nbsp;==&nbsp;((<span style="color: #0000FF; ">long</span>*)&amp;rguid2)[2]&nbsp;&amp;&amp;<br /><span style="color: #008080; ">&nbsp;86</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((<span style="color: #0000FF; ">long</span>*)&amp;rguid1)[3]&nbsp;==&nbsp;((<span style="color: #0000FF; ">long</span>*)&amp;rguid2)[3];<br /><span style="color: #008080; ">&nbsp;87</span>&nbsp;}<br /><span style="color: #008080; ">&nbsp;88</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;89</span>&nbsp;<span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;判断两个&nbsp;GUID&nbsp;是否相等</span><span style="color: #808080; "><br /></span><span style="color: #008080; ">&nbsp;90</span>&nbsp;<span style="color: #808080; "></span>inline&nbsp;BOOL&nbsp;IsEqualGUID(REFGUID&nbsp;rguid1,&nbsp;REFGUID&nbsp;rguid2)<br /><span style="color: #008080; ">&nbsp;91</span>&nbsp;{<br /><span style="color: #008080; ">&nbsp;92</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;!memcmp(&amp;rguid1,&nbsp;&amp;rguid2,&nbsp;<span style="color: #0000FF; ">sizeof</span>(GUID));<br /><span style="color: #008080; ">&nbsp;93</span>&nbsp;}<br /><span style="color: #008080; ">&nbsp;94</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;95</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;CopyMemory(dest,&nbsp;src,&nbsp;len)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memcpy((dest),&nbsp;(src),(len))<br /><span style="color: #008080; ">&nbsp;96</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;ZeroMemory(dest,&nbsp;len)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset((dest),&nbsp;0,&nbsp;(len))<br /><span style="color: #008080; ">&nbsp;97</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;FillMemory(dest,&nbsp;len,&nbsp;value)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset((dest),&nbsp;value,&nbsp;(len))<br /><span style="color: #008080; ">&nbsp;98</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;GetCurrentThreadId&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gettid<br /><span style="color: #008080; ">&nbsp;99</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;OutputDebugString(str)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tprintf(_T("%s"),&nbsp;str)<br /><span style="color: #008080; ">100</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;LoadLibrary(file)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dlopen(file,&nbsp;RTLD_NOW)<br /><span style="color: #008080; ">101</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;FreeLibrary&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dlclose<br /><span style="color: #008080; ">102</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;GetProcAddress&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dlsym<br /><span style="color: #008080; ">103</span>&nbsp;<br /><span style="color: #008080; ">104</span>&nbsp;inline&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;GetLastError()<br /><span style="color: #008080; ">105</span>&nbsp;{<br /><span style="color: #008080; ">106</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;errno;<br /><span style="color: #008080; ">107</span>&nbsp;}<br /><span style="color: #008080; ">108</span>&nbsp;<br /><span style="color: #008080; ">109</span>&nbsp;inline&nbsp;DWORD&nbsp;GetTickCount()<br /><span style="color: #008080; ">110</span>&nbsp;{<br /><span style="color: #008080; ">111</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;clkTck&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">112</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(clkTck&nbsp;==&nbsp;0)&nbsp;clkTck&nbsp;=&nbsp;1000&nbsp;/&nbsp;::sysconf(_SC_CLK_TCK);<br /><span style="color: #008080; ">113</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;(DWORD)::times(NULL)&nbsp;*&nbsp;clkTck;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;不能溢出</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">114</span>&nbsp;<span style="color: #008000; "></span>}<br /><span style="color: #008080; ">115</span>&nbsp;<br /><span style="color: #008080; ">116</span>&nbsp;inline&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;Sleep(DWORD&nbsp;ms)<br /><span style="color: #008080; ">117</span>&nbsp;{<br /><span style="color: #008080; ">118</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;timespec&nbsp;req,&nbsp;rem;<br /><span style="color: #008080; ">119</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;req.tv_sec&nbsp;=&nbsp;ms&nbsp;/&nbsp;1000;&nbsp;req.tv_nsec&nbsp;=&nbsp;(ms&nbsp;%&nbsp;1000)&nbsp;*&nbsp;1000000;<br /><span style="color: #008080; ">120</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(::nanosleep(&amp;req,&nbsp;&amp;rem)&nbsp;&amp;&amp;&nbsp;::GetLastError()&nbsp;==&nbsp;EINTR)&nbsp;req&nbsp;=&nbsp;rem;<br /><span style="color: #008080; ">121</span>&nbsp;}<br /><span style="color: #008080; ">122</span>&nbsp;<br /><span style="color: #008080; ">123</span>&nbsp;inline&nbsp;<span style="color: #0000FF; ">long</span>&nbsp;InterlockedIncrement(<span style="color: #0000FF; ">long</span>&nbsp;<span style="color: #0000FF; ">volatile</span>*&nbsp;v)<br /><span style="color: #008080; ">124</span>&nbsp;{<br /><span style="color: #008080; ">125</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">long</span>&nbsp;src&nbsp;=&nbsp;1;<br /><span style="color: #008080; ">126</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;Modern&nbsp;486+&nbsp;processor&nbsp;</span><span style="color: #008000; ">*/</span><br /><span style="color: #008080; ">127</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__asm__&nbsp;__volatile__(<br /><span style="color: #008080; ">128</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"lock&nbsp;xaddl&nbsp;%0,&nbsp;%1;"<br /><span style="color: #008080; ">129</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:"=r"(src),&nbsp;"=m"(*v)<br /><span style="color: #008080; ">130</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:"0"(src));<br /><span style="color: #008080; ">131</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;src&nbsp;+&nbsp;1;<br /><span style="color: #008080; ">132</span>&nbsp;}<br /><span style="color: #008080; ">133</span>&nbsp;<br /><span style="color: #008080; ">134</span>&nbsp;inline&nbsp;<span style="color: #0000FF; ">long</span>&nbsp;InterlockedDecrement(<span style="color: #0000FF; ">long</span>&nbsp;<span style="color: #0000FF; ">volatile</span>*&nbsp;v)<br /><span style="color: #008080; ">135</span>&nbsp;{<br /><span style="color: #008080; ">136</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">long</span>&nbsp;src&nbsp;=&nbsp;-1;<br /><span style="color: #008080; ">137</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;Modern&nbsp;486+&nbsp;processor&nbsp;</span><span style="color: #008000; ">*/</span><br /><span style="color: #008080; ">138</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__asm__&nbsp;__volatile__(<br /><span style="color: #008080; ">139</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"lock&nbsp;xaddl&nbsp;%0,&nbsp;%1;"<br /><span style="color: #008080; ">140</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:"=r"(src),&nbsp;"=m"(*v)<br /><span style="color: #008080; ">141</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:"0"(src));<br /><span style="color: #008080; ">142</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;src&nbsp;-&nbsp;1;<br /><span style="color: #008080; ">143</span>&nbsp;}<br /><span style="color: #008080; ">144</span>&nbsp;<br /><span style="color: #008080; ">145</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;stricmp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcasecmp<br /><span style="color: #008080; ">146</span>&nbsp;<br /><span style="color: #008080; ">147</span>&nbsp;#include&nbsp;&lt;ctype.h&gt;<br /><span style="color: #008080; ">148</span>&nbsp;inline&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;strupr(<span style="color: #0000FF; ">char</span>&nbsp;*s)<br /><span style="color: #008080; ">149</span>&nbsp;{<br /><span style="color: #008080; ">150</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>&nbsp;(*s)<br /><span style="color: #008080; ">151</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">152</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*s&nbsp;=&nbsp;toupper((unsigned&nbsp;<span style="color: #0000FF; ">char</span>)&nbsp;*s);<br /><span style="color: #008080; ">153</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s++;<br /><span style="color: #008080; ">154</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">155</span>&nbsp;}<br /><span style="color: #008080; ">156</span>&nbsp;<br /><span style="color: #008080; ">157</span>&nbsp;inline&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;strlwr(<span style="color: #0000FF; ">char</span>&nbsp;*s)<br /><span style="color: #008080; ">158</span>&nbsp;{<br /><span style="color: #008080; ">159</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>&nbsp;(*s)<br /><span style="color: #008080; ">160</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">161</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*s&nbsp;=&nbsp;tolower((unsigned&nbsp;<span style="color: #0000FF; ">char</span>)&nbsp;*s);<br /><span style="color: #008080; ">162</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s++;<br /><span style="color: #008080; ">163</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">164</span>&nbsp;}<br /><span style="color: #008080; ">165</span>&nbsp;<br /><span style="color: #008080; ">166</span>&nbsp;<span style="color: #0000FF; ">#endif</span>&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;ndef&nbsp;__G_LIN_DEF_H_</span></div><span style="color: red;"><strong><br /></strong></span><div>功能是对一些常用函数改装成Windows相关函数的名字</div></div><img src ="http://www.cppblog.com/xkjy3000/aggbug/207122.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xkjy3000/" target="_blank">虚空骄阳</a> 2014-05-27 21:38 <a href="http://www.cppblog.com/xkjy3000/archive/2014/05/27/207122.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SimpleAudioEngine 判断音效是否播放完</title><link>http://www.cppblog.com/xkjy3000/archive/2014/05/18/207004.html</link><dc:creator>虚空骄阳</dc:creator><author>虚空骄阳</author><pubDate>Sun, 18 May 2014 07:21:00 GMT</pubDate><guid>http://www.cppblog.com/xkjy3000/archive/2014/05/18/207004.html</guid><wfw:comment>http://www.cppblog.com/xkjy3000/comments/207004.html</wfw:comment><comments>http://www.cppblog.com/xkjy3000/archive/2014/05/18/207004.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xkjy3000/comments/commentRss/207004.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xkjy3000/services/trackbacks/207004.html</trackback:ping><description><![CDATA[<div><span style="color: #0000ff;">SimpleAudioEngine.h&nbsp;</span>文件中添加以下函数定义：</div><div><span style="color: #008000;">//判断当前音效是否已经播放完</span></div><div>bool getEffectIsPlayingFinished(unsigned int nSoundId);<br /><br /><div><span style="color: #0000ff;">SimpleAudioEngine.cpp&nbsp;</span>函数实现，比较简单：</div><div><span style="color: #008000;">//判断当前音效是否已经播放完</span></div><div>bool SimpleAudioEngine::getEffectIsPlayingFinished(unsigned int nSoundId)</div><div>{</div><div>&nbsp; &nbsp; &nbsp; &nbsp;EffectList::iterator itor = sharedList().find(nSoundId);</div><div>&nbsp; &nbsp; &nbsp; &nbsp;bool bRet = false;</div><div>&nbsp; &nbsp; &nbsp; &nbsp;if (&nbsp;itor&nbsp;!= sharedList().end() )</div><div>&nbsp; &nbsp; &nbsp; &nbsp;{</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bRet =&nbsp;itor-&gt;second-&gt;IsPlaying();</div><div>&nbsp; &nbsp; &nbsp; &nbsp;}</div><div>&nbsp; &nbsp; &nbsp; &nbsp;return bRet;</div><div>}<br /><br /><div><span style="color: red;">注：修改后将libCocosDenshion类库重新编译一下。只要通过我们的soundid参数，便可找到MciPlayer，然后就可以处理了。</span></div></div></div><img src ="http://www.cppblog.com/xkjy3000/aggbug/207004.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xkjy3000/" target="_blank">虚空骄阳</a> 2014-05-18 15:21 <a href="http://www.cppblog.com/xkjy3000/archive/2014/05/18/207004.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一些常用的小函数</title><link>http://www.cppblog.com/xkjy3000/archive/2014/05/06/206835.html</link><dc:creator>虚空骄阳</dc:creator><author>虚空骄阳</author><pubDate>Tue, 06 May 2014 02:29:00 GMT</pubDate><guid>http://www.cppblog.com/xkjy3000/archive/2014/05/06/206835.html</guid><wfw:comment>http://www.cppblog.com/xkjy3000/comments/206835.html</wfw:comment><comments>http://www.cppblog.com/xkjy3000/archive/2014/05/06/206835.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xkjy3000/comments/commentRss/206835.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xkjy3000/services/trackbacks/206835.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: #008000; ">//</span><span style="color: #008000; ">取当前日期&nbsp;&nbsp;</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">string</span>&nbsp;getCurDate()&nbsp;&nbsp;<br />{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;time_t&nbsp;nowtime;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;time(&amp;nowtime);&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">取当前时间值&nbsp;&nbsp;</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;tm&nbsp;*tPtr;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;tPtr&nbsp;=&nbsp;localtime(&amp;nowtime);&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;dateStamp[32];&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ACE_OS::sprintf(dateStamp,&nbsp;"%04d%02d%02d",&nbsp;tPtr-&gt;tm_year+1900&nbsp;,tPtr-&gt;tm_mon+1,tPtr-&gt;tm_mday);&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;dateStamp;&nbsp;&nbsp;<br />}&nbsp;&nbsp;<br /><span style="color: #008000; ">//</span><span style="color: #008000; ">取得当前时间&nbsp;&nbsp;</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">string</span>&nbsp;getCurTime()&nbsp;&nbsp;<br />{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;time_t&nbsp;nowtime;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;time(&amp;nowtime);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;tm&nbsp;*tPtr;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;tPtr&nbsp;=&nbsp;localtime(&amp;nowtime);&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;timeStamp[15];&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;memset(timeStamp,&nbsp;0x00,&nbsp;15);&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ACE_OS::sprintf(timeStamp,&nbsp;"%02d%02d%02d",&nbsp;tPtr-&gt;tm_hour,tPtr-&gt;tm_min,tPtr-&gt;tm_sec);&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;timeStamp;&nbsp;&nbsp;<br />}&nbsp;&nbsp;<br /><span style="color: #008000; ">//</span><span style="color: #008000; ">int型转string&nbsp;型&nbsp;&nbsp;</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">string</span>&nbsp;intToString(<span style="color: #0000FF; ">int</span>&nbsp;value)&nbsp;&nbsp;<br />{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;tmpString[15];&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;memset(tmpString,&nbsp;0x00,&nbsp;15);&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;sprintf(tmpString,&nbsp;"%d",&nbsp;value);&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;&nbsp;tmpString;&nbsp;&nbsp;<br />}&nbsp;&nbsp;<br /><span style="color: #008000; ">//</span><span style="color: #008000; ">将字符串处理为小写。&nbsp;&nbsp;</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">void</span>&nbsp;toLower(<span style="color: #0000FF; ">string</span>&nbsp;&amp;strTmp)&nbsp;&nbsp;<br />{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(unsigned&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;strTmp.length();&nbsp;i++)&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strTmp[i]&nbsp;=&nbsp;tolower(strTmp[i]);&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>;&nbsp;&nbsp;<br />}&nbsp;&nbsp;<br /><span style="color: #808080; ">///</span><span style="color: #008000; ">根据分隔标记flag将字符串放入。。。。&nbsp;&nbsp;</span><span style="color: #808080; "><br /></span><span style="color: #0000FF; ">int</span>&nbsp;getItem(<span style="color: #0000FF; ">string</span>&nbsp;&amp;msg&nbsp;,&nbsp;&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;flag,&nbsp;vector&lt;<span style="color: #0000FF; ">string</span>&gt;&nbsp;&amp;line)&nbsp;&nbsp;<br />{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span>&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(line.size()&nbsp;!=&nbsp;0)&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;line.clear();&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(msg.length()&nbsp;==&nbsp;0)&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;*tmpMsg&nbsp;=&nbsp;&amp;msg[0];&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;begin&nbsp;=&nbsp;0;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;end&nbsp;=&nbsp;0;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">string</span>&nbsp;tmp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(unsigned&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;msg.length();&nbsp;i&nbsp;++)&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(tmpMsg[i]&nbsp;==&nbsp;flag)&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;=&nbsp;i;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">continue</span>;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;((end-begin)&gt;&nbsp;0)&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp&nbsp;=&nbsp;<span style="color: #0000FF; ">string</span>(&amp;tmpMsg[begin],&nbsp;end-begin);&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp&nbsp;=&nbsp;"";&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin&nbsp;=&nbsp;end+1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;line.push_back(tmp);&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;((msg.length()-begin)&gt;&nbsp;0)&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp&nbsp;&nbsp;=&nbsp;<span style="color: #0000FF; ">string</span>(&amp;tmpMsg[begin],&nbsp;msg.length()-begin);&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;line.push_back(tmp);&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">catch</span>(<img src="http://www.cppblog.com/Images/dot.gif"  alt="" />)&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ACE_DEBUG((&nbsp;_INFO&nbsp;ACE_TEXT("&nbsp;&nbsp;getItem&nbsp;execpaction:[%s].\n"),&nbsp;msg.c_str()));&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;-1;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;&nbsp;&nbsp;<br />}&nbsp;&nbsp;<br /><span style="color: #808080; ">///</span><span style="color: #008000; ">/输出vector的内容。&nbsp;&nbsp;</span><span style="color: #808080; "><br /></span><span style="color: #0000FF; ">void</span>&nbsp;dispVector(<span style="color: #0000FF; ">const</span>&nbsp;vector&lt;<span style="color: #0000FF; ">string</span>&gt;&nbsp;&amp;vecTmp)&nbsp;&nbsp;<br />{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(vecTmp.size()&nbsp;==&nbsp;0)&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ACE_DEBUG((&nbsp;_INFO&nbsp;ACE_TEXT(&nbsp;"&nbsp;vector&nbsp;is&nbsp;null\n"&nbsp;)));&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(unsigned&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0&nbsp;;&nbsp;i&nbsp;&lt;&nbsp;vecTmp.size();&nbsp;i++)&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ACE_DEBUG((&nbsp;_INFO&nbsp;ACE_TEXT(&nbsp;"&nbsp;&nbsp;[%25s]\n"&nbsp;),&nbsp;vecTmp[i].c_str()));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;;&nbsp;&nbsp;<br />}&nbsp;&nbsp;<br /><span style="color: #808080; ">///</span><span style="color: #008000; ">/返回num后的字符串&nbsp;&nbsp;</span><span style="color: #808080; "><br /></span><span style="color: #0000FF; ">string</span>&nbsp;lastStr(<span style="color: #0000FF; ">string</span>&nbsp;&amp;from,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;num)&nbsp;&nbsp;<br />{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(from.length()&nbsp;&lt;=&nbsp;(unsigned&nbsp;<span style="color: #0000FF; ">int</span>)num)&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;from;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;from.substr(from.length()-num,&nbsp;num);&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />}&nbsp;&nbsp;<br />&nbsp;&nbsp;<br /><span style="color: #0000FF; ">string</span>&nbsp;leftFullChar(<span style="color: #0000FF; ">string</span>&nbsp;&amp;from,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;count,&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;flag)&nbsp;&nbsp;<br />{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(from.length()&nbsp;&gt;&nbsp;(unsigned&nbsp;<span style="color: #0000FF; ">int</span>)count)&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;from&nbsp;;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;fullCount&nbsp;&nbsp;=&nbsp;(<span style="color: #0000FF; ">int</span>)from.length()&nbsp;-&nbsp;count;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">string</span>&nbsp;strTmp(fullCount,&nbsp;flag);&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;strTmp&nbsp;+=&nbsp;from;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;strTmp;&nbsp;&nbsp;<br />}&nbsp;&nbsp;<br />&nbsp;&nbsp;<br /><span style="color: #0000FF; ">string</span>&nbsp;rightFullChar(<span style="color: #0000FF; ">string</span>&nbsp;&amp;from,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;count,&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;flag)&nbsp;&nbsp;<br />{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(from.length()&nbsp;&gt;&nbsp;(unsigned&nbsp;<span style="color: #0000FF; ">int</span>)count)&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;from&nbsp;;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;fullCount&nbsp;&nbsp;=&nbsp;(<span style="color: #0000FF; ">int</span>)from.length()&nbsp;-&nbsp;count;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">string</span>&nbsp;strTmp(fullCount,&nbsp;flag);&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;from+strTmp;&nbsp;&nbsp;<br />}</div><img src ="http://www.cppblog.com/xkjy3000/aggbug/206835.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xkjy3000/" target="_blank">虚空骄阳</a> 2014-05-06 10:29 <a href="http://www.cppblog.com/xkjy3000/archive/2014/05/06/206835.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Cocos2d-x 中文显示</title><link>http://www.cppblog.com/xkjy3000/archive/2014/04/13/206552.html</link><dc:creator>虚空骄阳</dc:creator><author>虚空骄阳</author><pubDate>Sun, 13 Apr 2014 05:52:00 GMT</pubDate><guid>http://www.cppblog.com/xkjy3000/archive/2014/04/13/206552.html</guid><wfw:comment>http://www.cppblog.com/xkjy3000/comments/206552.html</wfw:comment><comments>http://www.cppblog.com/xkjy3000/archive/2014/04/13/206552.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xkjy3000/comments/commentRss/206552.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xkjy3000/services/trackbacks/206552.html</trackback:ping><description><![CDATA[<font color="#ff0000"><span style="color: red; background-color: #ffffff;">一、使用第三方库iconv</span><span style="color: #0000ff; background-color: #ffffff;"><br /></span></font><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; ">bool</span>&nbsp;IConvConvert(<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;*from_charset,&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;*to_charset,&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;*inbuf,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;inlen,&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;*outbuf,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;outlen)&nbsp;<br /><br />{<br /><br />iconv_t&nbsp;cd&nbsp;=&nbsp;iconv_open(to_charset,&nbsp;from_charset);<br /><br /><span style="color: #0000FF; ">if</span>&nbsp;(cd&nbsp;==&nbsp;0)&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">false</span>;<br /><br /><span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;**pin&nbsp;=&nbsp;&amp;inbuf;<br /><br /><span style="color: #0000FF; ">char</span>&nbsp;**pout&nbsp;=&nbsp;&amp;outbuf;<br /><br />memset(outbuf,0,outlen);<br /><br />size_t&nbsp;ret&nbsp;=&nbsp;iconv(cd,pin,(size_t&nbsp;*)&amp;inlen,pout,(size_t&nbsp;*)&amp;outlen);<br /><br />iconv_close(cd);<br /><br /><span style="color: #0000FF; ">return</span>&nbsp;ret&nbsp;==&nbsp;(size_t)(-1)&nbsp;?&nbsp;<span style="color: #0000FF; ">false</span>&nbsp;:&nbsp;<span style="color: #0000FF; ">true</span>;<br /><br />}<br /><br />std::<span style="color: #0000FF; ">string</span>&nbsp;IConvConvert_GBKToUTF8(<span style="color: #0000FF; ">const</span>&nbsp;std::<span style="color: #0000FF; ">string</span>&amp;&nbsp;str)<br /><br />{<br /><br /><span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;textIn&nbsp;=&nbsp;str.c_str();<br /><br /><span style="color: #0000FF; ">char</span>&nbsp;textOut[256];<br /><br /><span style="color: #0000FF; ">bool</span>&nbsp;ret&nbsp;=&nbsp;IConvConvert("gb2312",&nbsp;"utf-8",&nbsp;textIn,&nbsp;strlen(textIn),textOut,&nbsp;256);<br /><br /><span style="color: #0000FF; ">return</span>&nbsp;ret&nbsp;?&nbsp;<span style="color: #0000FF; ">string</span>(textOut)&nbsp;:&nbsp;<span style="color: #0000FF; ">string</span>();<br /><br />}</div><font color="#ff0000"><span style="color: #0000ff; background-color: #ffffff;">使用方法：<br /></span></font><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 />-->std::<span style="color: #0000FF; ">string</span>&nbsp;text&nbsp;=&nbsp;IConvConvert_GBKToUTF8("我是中文字符串");<br /><br />CCLabelTTF*&nbsp;pLabel&nbsp;=&nbsp;CCLabelTTF::labelWithString(text.c_str(),&nbsp;"Arial",&nbsp;24);</div><font color="#ff0000"><span style="color: #0000ff; background-color: #ffffff;"><br /></span><span style="color: red; background-color: #ffffff;">二、使用XML文件</span><span style="color: #0000ff; background-color: #ffffff;"><br /></span></font><div><span style="color: #008000;">（通过读取xml文件显示中文，这种方法更利于软件的国际化）</span></div><div>1、先写好一个xml文件（CHN_Strings.xml）。注意记得要以UTF-8编码保存。格式很简单，一个key对应一个string的键值对。如下：</div><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"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">dict</span><span style="color: #0000FF; ">&gt;</span>&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">key</span><span style="color: #0000FF; ">&gt;</span>language<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">key</span><span style="color: #0000FF; ">&gt;</span>&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">string</span><span style="color: #0000FF; ">&gt;</span>English<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">string</span><span style="color: #0000FF; ">&gt;</span>&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">key</span><span style="color: #0000FF; ">&gt;</span>username<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">key</span><span style="color: #0000FF; ">&gt;</span>&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">string</span><span style="color: #0000FF; ">&gt;</span>虚空骄阳<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">string</span><span style="color: #0000FF; ">&gt;</span>&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">key</span><span style="color: #0000FF; ">&gt;</span>website<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">key</span><span style="color: #0000FF; ">&gt;</span>&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">string</span><span style="color: #0000FF; ">&gt;</span>http://www.cppblog.com/xkjy3000/<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">string</span><span style="color: #0000FF; ">&gt;</span>&nbsp;&nbsp;<br /><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">dict</span><span style="color: #0000FF; ">&gt;</span></div></div><div>2、通过CCDictionary读取xml<br /><div><span style="color: #008000;">（CCDictionary其实是利用哈希表算法来进行CCObject管理的一个类）</span></div>A、创建词典类实例<div><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 />-->CCDictionary&nbsp;*pchStrings&nbsp;=&nbsp;CCDictionary::createWithContentsOfFile("CHN_Strings.xml");</div></div>B、通过键（key）获取值（value）<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; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;*pUsername&nbsp;=&nbsp;((CCString*)pchStrings-&gt;objectForKey("username"))-&gt;m_sString.c_str();</div>C、使用value<br /><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 />-->CCLabelTTF*&nbsp;pLabel&nbsp;=&nbsp;CCLabelTTF::create(pUsername,&nbsp;"Arial",&nbsp;24); &nbsp; &nbsp; &nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">这里创建一个文本&nbsp;&nbsp;</span><span style="color: #008000; "><br /></span>pLabel-&gt;setPosition(ccp(origin.x&nbsp;+&nbsp;visibleSize.width/2,origin.y&nbsp;+&nbsp;visibleSize.height&nbsp;-&nbsp;pLabel-&gt;getContentSize().height));&nbsp;&nbsp;<br /><span style="color: #0000FF; ">this</span>-&gt;addChild(pLabel,&nbsp;1);</div><br /><span style="color: #0000ff;"><strong>以下自定义读取指定xml中指定key中文字符串的函数<br /></strong></span>函数声明<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; ">static</span>&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;getCHString(<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">string</span>&nbsp;filename,&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">string</span>&nbsp;key);</div>函数实现<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; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;XXX::getCHString(<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">string</span>&nbsp;filename,&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">string</span>&nbsp;key)<br />{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">利用CCDictionary来读取xml</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;CCDictionary&nbsp;*pStrings&nbsp;=&nbsp;CCDictionary::createWithContentsOfFile(filename.c_str());<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">读取key键中的值&nbsp;objectForKey根据key，获取对应的string</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;*pStr&nbsp;=&nbsp;((CCString*)pStrings-&gt;objectForKey(key))-&gt;m_sString.c_str();<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;pStr;<br />}</div><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; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;pText&nbsp;=&nbsp;XXX::getCHString("CHN_Strings.xml",&nbsp;"username");</div></div><img src ="http://www.cppblog.com/xkjy3000/aggbug/206552.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xkjy3000/" target="_blank">虚空骄阳</a> 2014-04-13 13:52 <a href="http://www.cppblog.com/xkjy3000/archive/2014/04/13/206552.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Cocos2d-x 编译release以及NDK相关选项</title><link>http://www.cppblog.com/xkjy3000/archive/2014/04/13/206551.html</link><dc:creator>虚空骄阳</dc:creator><author>虚空骄阳</author><pubDate>Sun, 13 Apr 2014 04:30:00 GMT</pubDate><guid>http://www.cppblog.com/xkjy3000/archive/2014/04/13/206551.html</guid><wfw:comment>http://www.cppblog.com/xkjy3000/comments/206551.html</wfw:comment><comments>http://www.cppblog.com/xkjy3000/archive/2014/04/13/206551.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xkjy3000/comments/commentRss/206551.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xkjy3000/services/trackbacks/206551.html</trackback:ping><description><![CDATA[<span style="font-family: 'Hiragino Sans GB W3', 'Hiragino Sans GB', Arial, Helvetica, simsun, u5b8bu4f53; font-size: 16px; line-height: 28px; background-color: #ffffff;">Win下cygwin编译时：</span><br style="line-height: 28px; font-family: 'Hiragino Sans GB W3', 'Hiragino Sans GB', Arial, Helvetica, simsun, u5b8bu4f53; font-size: 16px; background-color: #ffffff;" /><span style="font-family: 'Hiragino Sans GB W3', 'Hiragino Sans GB', Arial, Helvetica, simsun, u5b8bu4f53; font-size: 16px; line-height: 28px; background-color: #ffffff; color: #0000ff;">方法1：</span><br style="line-height: 28px; font-family: 'Hiragino Sans GB W3', 'Hiragino Sans GB', Arial, Helvetica, simsun, u5b8bu4f53; font-size: 16px; background-color: #ffffff;" /><span style="font-family: 'Hiragino Sans GB W3', 'Hiragino Sans GB', Arial, Helvetica, simsun, u5b8bu4f53; font-size: 16px; line-height: 28px; background-color: #ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 命令：</span><br style="line-height: 28px; font-family: 'Hiragino Sans GB W3', 'Hiragino Sans GB', Arial, Helvetica, simsun, u5b8bu4f53; font-size: 16px; background-color: #ffffff;" /><span style="font-family: 'Hiragino Sans GB W3', 'Hiragino Sans GB', Arial, Helvetica, simsun, u5b8bu4f53; font-size: 16px; line-height: 28px; background-color: #ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; build_native.sh NDK_DEBUG=1 V=0</span><br style="line-height: 28px; font-family: 'Hiragino Sans GB W3', 'Hiragino Sans GB', Arial, Helvetica, simsun, u5b8bu4f53; font-size: 16px; background-color: #ffffff;" /><span style="font-family: 'Hiragino Sans GB W3', 'Hiragino Sans GB', Arial, Helvetica, simsun, u5b8bu4f53; font-size: 16px; line-height: 28px; background-color: #ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 其中，NDK_DEBUG为0则表示为release版，为1表示为debug版。V为0则显示简要编译信息，为1显示详细编译信息(会显示具体编译指令)。</span><br style="line-height: 28px; font-family: 'Hiragino Sans GB W3', 'Hiragino Sans GB', Arial, Helvetica, simsun, u5b8bu4f53; font-size: 16px; background-color: #ffffff;" /><br style="line-height: 28px; font-family: 'Hiragino Sans GB W3', 'Hiragino Sans GB', Arial, Helvetica, simsun, u5b8bu4f53; font-size: 16px; background-color: #ffffff;" /><span style="font-family: 'Hiragino Sans GB W3', 'Hiragino Sans GB', Arial, Helvetica, simsun, u5b8bu4f53; font-size: 16px; line-height: 28px; background-color: #ffffff; color: #0000ff;">方法2：</span><br style="line-height: 28px; font-family: 'Hiragino Sans GB W3', 'Hiragino Sans GB', Arial, Helvetica, simsun, u5b8bu4f53; font-size: 16px; background-color: #ffffff;" /><span style="font-family: 'Hiragino Sans GB W3', 'Hiragino Sans GB', Arial, Helvetica, simsun, u5b8bu4f53; font-size: 16px; line-height: 28px; background-color: #ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AndroidManifest.xml文件的&lt;application&gt;元素的android:debuggable="true"属性，若为true，则是debug版本，若为false，则为release版</span><br style="line-height: 28px; font-family: 'Hiragino Sans GB W3', 'Hiragino Sans GB', Arial, Helvetica, simsun, u5b8bu4f53; font-size: 16px; background-color: #ffffff;" /><br style="line-height: 28px; font-family: 'Hiragino Sans GB W3', 'Hiragino Sans GB', Arial, Helvetica, simsun, u5b8bu4f53; font-size: 16px; background-color: #ffffff;" /><span style="font-family: 'Hiragino Sans GB W3', 'Hiragino Sans GB', Arial, Helvetica, simsun, u5b8bu4f53; font-size: 16px; line-height: 28px; background-color: #ffffff; color: #008000;">注：NDK会优先检测命令的参数，若无参数，则检测AndroidManifest.xml文件的配置。</span><br style="line-height: 28px; font-family: 'Hiragino Sans GB W3', 'Hiragino Sans GB', Arial, Helvetica, simsun, u5b8bu4f53; font-size: 16px; background-color: #ffffff;" /><br style="line-height: 28px; font-family: 'Hiragino Sans GB W3', 'Hiragino Sans GB', Arial, Helvetica, simsun, u5b8bu4f53; font-size: 16px; background-color: #ffffff;" /><span style="font-family: 'Hiragino Sans GB W3', 'Hiragino Sans GB', Arial, Helvetica, simsun, u5b8bu4f53; font-size: 16px; line-height: 28px; background-color: #ffffff; color: #0000ff;">cocos2d-x编译选项：</span><br style="line-height: 28px; font-family: 'Hiragino Sans GB W3', 'Hiragino Sans GB', Arial, Helvetica, simsun, u5b8bu4f53; font-size: 16px; background-color: #ffffff;" /><span style="font-family: 'Hiragino Sans GB W3', 'Hiragino Sans GB', Arial, Helvetica, simsun, u5b8bu4f53; font-size: 16px; line-height: 28px; background-color: #ffffff;">Android.mk 中增加-DCOCOS2D_DEBUG=0开关，其默认为1</span><img src ="http://www.cppblog.com/xkjy3000/aggbug/206551.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xkjy3000/" target="_blank">虚空骄阳</a> 2014-04-13 12:30 <a href="http://www.cppblog.com/xkjy3000/archive/2014/04/13/206551.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Cocos2d-x 避免手动在Android.mk文件中手动添加cpp文件</title><link>http://www.cppblog.com/xkjy3000/archive/2014/04/13/206550.html</link><dc:creator>虚空骄阳</dc:creator><author>虚空骄阳</author><pubDate>Sun, 13 Apr 2014 04:25:00 GMT</pubDate><guid>http://www.cppblog.com/xkjy3000/archive/2014/04/13/206550.html</guid><wfw:comment>http://www.cppblog.com/xkjy3000/comments/206550.html</wfw:comment><comments>http://www.cppblog.com/xkjy3000/archive/2014/04/13/206550.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xkjy3000/comments/commentRss/206550.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xkjy3000/services/trackbacks/206550.html</trackback:ping><description><![CDATA[<span style="font-family: Arial; line-height: 26px; background-color: #ffffff;">将Android.mk的内容替换成以下内容即可：<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 />-->LOCAL_PATH&nbsp;:=&nbsp;$(call&nbsp;my-dir)&nbsp;<br />&nbsp;<br />include&nbsp;$(CLEAR_VARS)&nbsp;<br />&nbsp;<br />LOCAL_MODULE&nbsp;:=&nbsp;hellocpp_shared&nbsp;<br />&nbsp;<br />LOCAL_MODULE_FILENAME&nbsp;:=&nbsp;libhellocpp&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />FILE_LIST&nbsp;:=&nbsp;hellocpp/main.cpp&nbsp;<br />FILE_LIST&nbsp;+=&nbsp;$(wildcard&nbsp;$(LOCAL_PATH)/../../Classes/*.cpp)&nbsp;<br />LOCAL_SRC_FILES&nbsp;:=&nbsp;$(FILE_LIST:$(LOCAL_PATH)/%=%)&nbsp;<br />&nbsp;<br />LOCAL_C_INCLUDES&nbsp;:=&nbsp;$(LOCAL_PATH)/../../Classes&nbsp;<br /><br />LOCAL_WHOLE_STATIC_LIBRARIES&nbsp;+=&nbsp;cocos2dx_static<br />LOCAL_WHOLE_STATIC_LIBRARIES&nbsp;+=&nbsp;cocosdenshion_static<br />LOCAL_WHOLE_STATIC_LIBRARIES&nbsp;+=&nbsp;box2d_static<br />LOCAL_WHOLE_STATIC_LIBRARIES&nbsp;+=&nbsp;chipmunk_static<br />LOCAL_WHOLE_STATIC_LIBRARIES&nbsp;+=&nbsp;cocos_extension_static<br /><br />include&nbsp;$(BUILD_SHARED_LIBRARY)<br /><br />$(call&nbsp;import-module,cocos2dx)<br />$(call&nbsp;import-module,cocos2dx/platform/third_party/android/prebuilt/libcurl)<br />$(call&nbsp;import-module,CocosDenshion/android)<br />$(call&nbsp;import-module,extensions)<br />$(call&nbsp;import-module,external/Box2D)<br />$(call&nbsp;import-module,external/chipmunk)</div><img src ="http://www.cppblog.com/xkjy3000/aggbug/206550.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xkjy3000/" target="_blank">虚空骄阳</a> 2014-04-13 12:25 <a href="http://www.cppblog.com/xkjy3000/archive/2014/04/13/206550.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>