﻿<?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++博客-colorful</title><link>http://www.cppblog.com/colorful/</link><description>zc qq:1337220912</description><language>zh-cn</language><lastBuildDate>Tue, 07 Apr 2026 16:10:37 GMT</lastBuildDate><pubDate>Tue, 07 Apr 2026 16:10:37 GMT</pubDate><ttl>60</ttl><item><title>Windows调试 - 如何使用dump文件</title><link>http://www.cppblog.com/colorful/archive/2015/10/21/212060.html</link><dc:creator>多彩人生</dc:creator><author>多彩人生</author><pubDate>Wed, 21 Oct 2015 07:22:00 GMT</pubDate><guid>http://www.cppblog.com/colorful/archive/2015/10/21/212060.html</guid><wfw:comment>http://www.cppblog.com/colorful/comments/212060.html</wfw:comment><comments>http://www.cppblog.com/colorful/archive/2015/10/21/212060.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/colorful/comments/commentRss/212060.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/colorful/services/trackbacks/212060.html</trackback:ping><description><![CDATA[<div>http://blog.csdn.net/jfkidear/article/details/22201829<br /><div style="margin: 5px 0px; font-stretch: normal; font-size: 20px; line-height: 30px; font-family: 'Microsoft YaHei'; background-color: #ffffff;">&nbsp;<h1><a target="_blank" href="http://blog.csdn.net/wangzhi0417/article/details/8569234" style="color: #000000; text-decoration: none;">Windows调试 - 如何使用dump文件</a></h1></div><div style="padding-top: 5px; padding-bottom: 5px; color: #999999; font-stretch: normal; font-size: 12px; line-height: 24px; font-family: Arial; text-align: right; background-color: #ffffff;"><span style="margin: 0px 5px 0px 0px;">2013-02-04 16:05</span>&nbsp;<span title="阅读次数" style="margin: 0px 5px; padding: 0px 0px 0px 14px; background: url(http://static.blog.csdn.net/images/ico_view.png) 0% 50% no-repeat;">445人阅读</span>&nbsp;<span title="评论次数" style="margin: 0px 5px; padding: 0px 0px 0px 14px; background: url(http://static.blog.csdn.net/images/ico_comm.png) 0% 50% no-repeat;"><a target="_blank" href="http://blog.csdn.net/wangzhi0417/article/details/8569234#comments" style="color: #336699; text-decoration: none;">评论</a>(0)</span>&nbsp;<span style="margin: 0px 5px;"><a target="_blank" title="收藏" style="color: #336699;">收藏</a></span>&nbsp;<span style="margin: 0px 5px;"><a target="_blank" href="http://blog.csdn.net/wangzhi0417/article/details/8569234#report" title="举报" style="color: #336699; text-decoration: none;">举报</a></span></div><div style="margin: 10px 0px; color: #333333; line-height: 26px; font-family: Arial, Console, Verdana, 'Courier New'; background-color: #ffffff;"><a target="_blank" href="http://www.csdn.net/tag/dmp%20dump%20debug%20visua" style="color: #336699; text-decoration: none; display: inline-block; padding: 4px 10px; line-height: 12px; margin-right: 10px; border: 1px solid #eeeeee; border-radius: 10px; background-color: #eeeeee;">dmp dump debug visua</a></div><div id="article_content" style="margin: 20px 0px 0px; font-stretch: normal; line-height: 26px; font-family: Arial; color: #333333; background-color: #ffffff;"><p><strong>如何使用dump文件</strong></p><p>我最近在开发一个windows下的程序(win7/win8)，有一些case下会crash，如果在自己开发机器上调试比较简单：运行程序，然后vs attach到进程上即可，但是在每台QA的机器上安装vs时不现实的，因此我们要用到dump文件。</p><p>微软网站有一篇文章讲述如何创建dump文件：<br /></p><p>http://support.microsoft.com/kb/931673</p><p><strong>第一种： 通过任务管理器</strong>：这种适用在程序挂了(crash)的时候进程还未退出，比如我运行程序，出现了下面的错：<br /></p><p><img src="http://img.my.csdn.net/uploads/201302/04/1359965831_1729.jpg" alt="" style="border: none; max-width: 100%;" /><br /></p><p>此时打开任务管理器，右击相应进程，点击"Create Dump File&#8220;：<br /></p><p><img src="http://img.my.csdn.net/uploads/201302/04/1359965880_4133.jpg" alt="" style="border: none; max-width: 100%;" /><br /></p><p>一会创建完成：<br /></p><p><img src="http://img.my.csdn.net/uploads/201302/04/1359965880_5630.jpg" alt="" style="border: none; max-width: 100%;" /><br /></p><p>然后把这个DMP文件拷到开发机器上，用VS打开： 会出现下面的界面，要想知道发生错误时候的调用栈，需要设置symbol的路径，点击&#8221;Set Symbol Paths&#8220;：<br /></p><p><img src="http://img.my.csdn.net/uploads/201302/04/1359965880_3656.jpg" alt="" height="364" width="859" style="border: none; max-width: 100%;" /><br /></p><p>注意这个pdb要对应于crash的exe，否则调用栈没法显示：</p><p><img src="http://img.my.csdn.net/uploads/201302/04/1359965881_7214.jpg" alt="" style="border: none; max-width: 100%;" /><br /></p><p>设置完成后，点击&#8221;Debug with Native Only&#8220; 你就可以看到调用栈了。</p><p><br /></p><p><strong>第二种： 改注册表</strong></p><p>如果程序crash的时候没有框蹦出来，可以通过改注册表的设置让操作系统在程序crash的时候自动生成dump，并放到特定的目录下</p><p>&nbsp;</p><div bg_plain"="" style="width: 687.046875px;"><div><div><strong>[plain]</strong>&nbsp;<a target="_blank" href="http://blog.csdn.net/wangzhi0417/article/details/8569234#" title="view plain" style="padding: 1px; display: inline-block; width: 16px; height: 16px; text-indent: -2000px; background-image: url(http://static.blog.csdn.net/scripts/SyntaxHighlighter/styles/images/default/ico_plain.gif); background-position: 0% 0%; background-repeat: no-repeat;">view plain</a><a target="_blank" href="http://blog.csdn.net/wangzhi0417/article/details/8569234#" title="copy" style="padding: 1px; display: inline-block; width: 16px; height: 16px; text-indent: -2000px; background-image: url(http://static.blog.csdn.net/scripts/SyntaxHighlighter/styles/images/default/ico_copy.gif); background-position: 0% 0%; background-repeat: no-repeat;">copy</a><div style="position: absolute; left: 568px; top: 2900px; width: 18px; height: 18px; z-index: 99;"></div><div style="position: absolute; left: 548px; top: 2975px; width: 18px; height: 18px; z-index: 99;"></div></div></div><ol start="1"><li style="line-height: 18px;">HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows&nbsp;Error&nbsp;Reporting\LocalDumps&nbsp;&nbsp;</li><li style="line-height: 18px;">Value&nbsp;Name&nbsp;=&nbsp;DumpType&nbsp;&nbsp;</li><li style="line-height: 18px;">Data&nbsp;type:&nbsp;REG_DWORD&nbsp;&nbsp;</li><li style="line-height: 18px;">Value&nbsp;Data&nbsp;=&nbsp;1&nbsp;&nbsp;</li></ol></div><br />其中Value Data=1代表的含义是：<p>&nbsp;</p><p>&nbsp;</p><div bg_plain"="" style="width: 687.046875px;"><div><div><strong>[plain]</strong>&nbsp;<a target="_blank" href="http://blog.csdn.net/wangzhi0417/article/details/8569234#" title="view plain" style="padding: 1px; display: inline-block; width: 16px; height: 16px; text-indent: -2000px; background-image: url(http://static.blog.csdn.net/scripts/SyntaxHighlighter/styles/images/default/ico_plain.gif); background-position: 0% 0%; background-repeat: no-repeat;">view plain</a><a target="_blank" href="http://blog.csdn.net/wangzhi0417/article/details/8569234#" title="copy" style="padding: 1px; display: inline-block; width: 16px; height: 16px; text-indent: -2000px; background-image: url(http://static.blog.csdn.net/scripts/SyntaxHighlighter/styles/images/default/ico_copy.gif); background-position: 0% 0%; background-repeat: no-repeat;">copy</a><div style="position: absolute; left: 568px; top: 3093px; width: 18px; height: 18px; z-index: 99;"></div><div style="position: absolute; left: 548px; top: 3168px; width: 18px; height: 18px; z-index: 99;"></div></div></div><ol start="1"><li style="line-height: 18px;">0&nbsp;=&nbsp;Create&nbsp;a&nbsp;custom&nbsp;dump&nbsp;&nbsp;</li><li style="line-height: 18px;">1&nbsp;=&nbsp;Mini&nbsp;dump&nbsp;&nbsp;</li><li style="line-height: 18px;">2&nbsp;=&nbsp;Full&nbsp;dump&nbsp;&nbsp;</li></ol></div><br />设置完成后，crash发生时，操作系统生成dump，路径在%LOCALAPPDATA%\CrashDumps下，详细可以参考：<p>&nbsp;</p><p>http://msdn.microsoft.com/en-us/library/bb787181%28v=VS.85%29.aspx</p><p>（完）</p></div></div><img src ="http://www.cppblog.com/colorful/aggbug/212060.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/colorful/" target="_blank">多彩人生</a> 2015-10-21 15:22 <a href="http://www.cppblog.com/colorful/archive/2015/10/21/212060.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>STL的remove函数和list的remove成员函数</title><link>http://www.cppblog.com/colorful/archive/2015/10/14/212010.html</link><dc:creator>多彩人生</dc:creator><author>多彩人生</author><pubDate>Wed, 14 Oct 2015 07:50:00 GMT</pubDate><guid>http://www.cppblog.com/colorful/archive/2015/10/14/212010.html</guid><wfw:comment>http://www.cppblog.com/colorful/comments/212010.html</wfw:comment><comments>http://www.cppblog.com/colorful/archive/2015/10/14/212010.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/colorful/comments/commentRss/212010.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/colorful/services/trackbacks/212010.html</trackback:ping><description><![CDATA[<div>http://www.cnblogs.com/kinuxroot/archive/2013/01/25/stl_remove_problem.html<br /><br /><div id="cnblogs_post_body" style="margin-bottom: 20px; word-break: break-word; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 20.7999992370605px;"><p style="margin-top: 10px; margin-bottom: 10px;">今天看书刚刚看的，就记录下来吧。这可能是老生常谈了，权且作为一个警醒的例子吧。</p><p style="margin-top: 10px; margin-bottom: 10px;">大家都知道STL有两个非常重要的组成部分，容器和算法。</p><p style="margin-top: 10px; margin-bottom: 10px;">算法就是一个个的函数，通过迭代器和容器关联在一起，完成一些工作。</p><p style="margin-top: 10px; margin-bottom: 10px;">算法和容器的分离为程序设计提供了很大的灵活性，但是也带来了一些负面效果，下面我讲的这个问题就是一个例子。</p><p style="margin-top: 10px; margin-bottom: 10px;">STL的算法里有一个remove函数，而list自身也有一个remove函数，功能都是一样的，移除某一个元素，那我们应该使用哪一个呢？</p><p style="margin-top: 10px; margin-bottom: 10px;">看一下下面这段程序</p><div style="margin: 5px 0px; font-size: 12px !important;"><div style="margin-top: 5px;"><span style="padding-right: 5px; line-height: 1.5 !important;"><a title="复制代码" style="color: #075db3; text-decoration: underline; border: none !important;"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" style="border: none !important;" /></a></span></div><pre style="margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; word-wrap: break-word; font-family: 'Courier New' !important;"><span style="color: #008080; line-height: 1.5 !important;"> 1</span>     list&lt;<span style="color: #0000ff; line-height: 1.5 !important;">int</span>&gt;<span style="line-height: 1.5 !important;"> numbers; </span><span style="color: #008080; line-height: 1.5 !important;"> 2</span>  <span style="color: #008080; line-height: 1.5 !important;"> 3</span>     <span style="color: #0000ff; line-height: 1.5 !important;">for</span> ( <span style="color: #0000ff; line-height: 1.5 !important;">int</span> number = <span style="color: #800080; line-height: 1.5 !important;">0</span>; number &lt;= <span style="color: #800080; line-height: 1.5 !important;">6</span>; number ++<span style="line-height: 1.5 !important;"> ) { </span><span style="color: #008080; line-height: 1.5 !important;"> 4</span> <span style="line-height: 1.5 !important;">        numbers.push_front(number); </span><span style="color: #008080; line-height: 1.5 !important;"> 5</span> <span style="line-height: 1.5 !important;">        numbers.push_back(number); </span><span style="color: #008080; line-height: 1.5 !important;"> 6</span> <span style="line-height: 1.5 !important;">    } </span><span style="color: #008080; line-height: 1.5 !important;"> 7</span>  <span style="color: #008080; line-height: 1.5 !important;"> 8</span> <span style="line-height: 1.5 !important;">    copy(numbers.begin(), numbers.end(), </span><span style="color: #008080; line-height: 1.5 !important;"> 9</span>             ostream_iterator&lt;<span style="color: #0000ff; line-height: 1.5 !important;">int</span>&gt;(cout, <span style="color: #800000; line-height: 1.5 !important;">"</span> <span style="color: #800000; line-height: 1.5 !important;">"</span><span style="line-height: 1.5 !important;">)); </span><span style="color: #008080; line-height: 1.5 !important;">10</span>     cout &lt;&lt;<span style="line-height: 1.5 !important;"> endl; </span><span style="color: #008080; line-height: 1.5 !important;">11</span>  <span style="color: #008080; line-height: 1.5 !important;">12</span>     <span style="color: #008000; line-height: 1.5 !important;">//</span><span style="color: #008000; line-height: 1.5 !important;"> remove algorithm will remove element but not erase the element from container </span><span style="color: #008080; line-height: 1.5 !important;">13</span>     <span style="color: #008000; line-height: 1.5 !important;">//</span><span style="color: #008000; line-height: 1.5 !important;"> it will return the logical desination of container</span> <span style="color: #008080; line-height: 1.5 !important;">14</span>     list&lt;<span style="color: #0000ff; line-height: 1.5 !important;">int</span>&gt;::iterator endOfNumbers = remove(numbers.begin(), numbers.end(), <span style="color: #800080; line-height: 1.5 !important;">3</span><span style="line-height: 1.5 !important;">); </span><span style="color: #008080; line-height: 1.5 !important;">15</span>  <span style="color: #008080; line-height: 1.5 !important;">16</span> <span style="line-height: 1.5 !important;">    copy(numbers.begin(), numbers.end(), </span><span style="color: #008080; line-height: 1.5 !important;">17</span>             ostream_iterator&lt;<span style="color: #0000ff; line-height: 1.5 !important;">int</span>&gt;(cout, <span style="color: #800000; line-height: 1.5 !important;">"</span> <span style="color: #800000; line-height: 1.5 !important;">"</span><span style="line-height: 1.5 !important;">)); </span><span style="color: #008080; line-height: 1.5 !important;">18</span>     cout &lt;&lt; endl;</pre><div style="margin-top: 5px;"><span style="padding-right: 5px; line-height: 1.5 !important;"><a title="复制代码" style="color: #075db3; text-decoration: underline; border: none !important;"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" style="border: none !important;" /></a></span></div></div><p style="margin-top: 10px; margin-bottom: 10px;">输出是什么呢？</p><p style="margin-top: 10px; margin-bottom: 10px;">第一行肯定是6 5 4 3 2 1 0 0 1 2 3 4 5 6，那么第二行会输出什么？</p><p style="margin-top: 10px; margin-bottom: 10px;">如果是没有仔细看过STL的人肯定会认为remove(number.begin(), numbers.end(), 3)会移除所有值为3的元素。所以输出是：6 5 4 2 1 0 0 1 2 4 5 6。</p><p style="margin-top: 10px; margin-bottom: 10px;">但是，我们看一下它真正的输出：</p><p style="margin-top: 10px; margin-bottom: 10px;">6 5 4 2 1 0 0 1 2 4 5 6 5 6</p><p style="margin-top: 10px; margin-bottom: 10px;">你可能会非常惊讶，为什么最后会多出5和6两个数呢？</p><p style="margin-top: 10px; margin-bottom: 10px;">我们来讲一下remove算法的原理。</p><p style="margin-top: 10px; margin-bottom: 10px;">remove算法工作时<strong>并不是直接把元素删除，而是用后面的元素替代前面的元素</strong>，也即是说如果我对1234这个序列remove 2，返回的序列是 1344（3被复制到2的位置，4被复制到3的位置）。</p><p style="margin-top: 10px; margin-bottom: 10px;">这样上面的例子就好解释了，那两个3的元素并没有被移除，而是<strong>用后面的元素覆盖了前面的元素</strong>。多出的那两个数没有被移除掉而已。</p><p style="margin-top: 10px; margin-bottom: 10px;">那么我们应该如何真正完成移除呢？remove函数会返回一个迭代器，那个迭代器是这个序列的逻辑终点，也即是我代码里的endOfNumbers，它指向倒数第二个5上。</p><p style="margin-top: 10px; margin-bottom: 10px;">于是我们要利用list的erase函数完成元素移除</p><div style="margin: 5px 0px; font-size: 12px !important;"><pre style="margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; word-wrap: break-word; font-family: 'Courier New' !important;">numbers.erase(endOfNumbers, numbers.end());</pre></div><p style="margin-top: 10px; margin-bottom: 10px;">这样我们就完成了我们的工作，稍稍有点曲折&#8230;&#8230;</p><p style="margin-top: 10px; margin-bottom: 10px;">其实我们可以把这两步放在一起，比如如果我想接着移除所有值为2的元素</p><div style="margin: 5px 0px; font-size: 12px !important;"><pre style="margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; word-wrap: break-word; font-family: 'Courier New' !important;">numbers.erase(remove(numbers.begin(), numbers.end(), <span style="color: #800080; line-height: 1.5 !important;">2</span>), numbers.end());</pre></div><p style="margin-top: 10px; margin-bottom: 10px;">这样我们就可以一步到位了。</p><p style="margin-top: 10px; margin-bottom: 10px;">但是这样好么？</p><p style="margin-top: 10px; margin-bottom: 10px;">不好。</p><p style="margin-top: 10px; margin-bottom: 10px;">大家会发现，remove函数的原理是复制而不是指针的移动（因为函数操纵的是迭代器，而C++的迭代器没有定义删除操作），这样会带来一个问题：我们使用list是因为它的修改的效率非常高，改变一下指针就可以了。而这里我们复制了元素，如果在vector中，可能还是高效的，因为vector无论如何都要复制，而对于list就不是如此了，<strong>会极度降低我们的效率。</strong></p><p style="margin-top: 10px; margin-bottom: 10px;">那我们怎么办呢？</p><p style="margin-top: 10px; margin-bottom: 10px;">答案是使用list自己的remove函数</p><div style="margin: 5px 0px; font-size: 12px !important;"><pre style="margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; word-wrap: break-word; font-family: 'Courier New' !important;">numbers.remove(<span style="color: #800080; line-height: 1.5 !important;">1</span>);</pre></div><p style="margin-top: 10px; margin-bottom: 10px;">我们可以这样删除所有值为1的元素。</p><p style="margin-top: 10px; margin-bottom: 10px;">也即是说，如果要删除list中的元素，<strong>我们应该使用list的remove成员函数，而不是remove算法</strong>！</p><p style="margin-top: 10px; margin-bottom: 10px;"><strong>小结</strong></p><p style="margin-top: 10px; margin-bottom: 10px;">我们都知道，STL是一个效率、复用性、灵活性折衷的产物，其中效率至关重要，所以STL已经禁止了一些效率低的操作（比如list的随机访问），而鼓励你去使用其它的容器。</p><p style="margin-top: 10px; margin-bottom: 10px;">但是，<strong>在算法中，为了灵活性，STL还是会牺牲一些东西</strong>，比如我们这个例子。</p><p style="margin-top: 10px; margin-bottom: 10px;">个人觉得，STL作为C++标准库的一个组成部分，特点和C++本身一模一样，强大而复杂，有些地方难以理解，很多细节需要学习注意，我们要学会避免陷入某些陷阱之中，比如这个例子就是一个效率陷阱。</p><p style="margin-top: 10px; margin-bottom: 10px;">其它更多的陷阱是错误处理方面的，STL本身并没有规定过多的错误处理，大部分的错误处理都交给了我们，理由很简单：<strong>性能至上</strong>，如果一个东西自身没有错误检查，我们可以包装一个带错误检查的类；但是如果这个东西自身就带了错误检查，那么我们就没有任何方法提升它的效率了。这也是很多C和C++库的设计原则。</p><p style="margin-top: 10px; margin-bottom: 10px;">所以，<strong>很多时候，需要我们深入细节</strong>，然后再决定到底怎么做。因为C++就是如此：有很多路可以走，需要我们自己选择最好的一条路。</p></div><div style="clear: both; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 20.7999992370605px;"></div><div id="blog_post_info_block" style="margin-top: 20px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 20.7999992370605px;"><div id="BlogPostCategory" style="margin-bottom: 10px;">分类:&nbsp;<a href="http://www.cnblogs.com/kinuxroot/category/448779.html" style="color: #075db3;">C++</a></div></div></div><img src ="http://www.cppblog.com/colorful/aggbug/212010.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/colorful/" target="_blank">多彩人生</a> 2015-10-14 15:50 <a href="http://www.cppblog.com/colorful/archive/2015/10/14/212010.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++ 11 Lambda表达式</title><link>http://www.cppblog.com/colorful/archive/2015/04/21/210407.html</link><dc:creator>多彩人生</dc:creator><author>多彩人生</author><pubDate>Tue, 21 Apr 2015 02:39:00 GMT</pubDate><guid>http://www.cppblog.com/colorful/archive/2015/04/21/210407.html</guid><wfw:comment>http://www.cppblog.com/colorful/comments/210407.html</wfw:comment><comments>http://www.cppblog.com/colorful/archive/2015/04/21/210407.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/colorful/comments/commentRss/210407.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/colorful/services/trackbacks/210407.html</trackback:ping><description><![CDATA[<div>http://www.cnblogs.com/hujian/archive/2012/02/14/2350306.html</div><div>C++ 11中的Lambda表达式用于定义并创建匿名的函数对象，以简化编程工作。Lambda的语法形式如下：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="background-color: yellow">[函数对象参数] (操作符重载函数参数) mutable或exception声明 -&gt;返回值类型 {函数体}</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可以看到，Lambda主要分为五个部分：[函数对象参数]、(操作符重载函数参数)、mutable或exception声明、-&gt;返回值类型、{函数体}。下面分别进行介绍。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   一、[函数对象参数]，标识一个Lambda的开始，这部分必须存在，不能省略。函数对象参数是传递给编译器自动生成的函数对象类的构造函数的。函数对象 参数只能使用那些到定义Lambda为止时Lambda所在作用范围内可见的局部变量（包括Lambda所在类的this）。函数对象参数有以下形式：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1、空。没有使用任何函数对象参数。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2、=。函数体内可以使用Lambda所在作用范围内所有可见的局部变量（包括Lambda所在类的this），并且是值传递方式（相当于编译器自动为我们按值传递了所有局部变量）。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3、&amp;。函数体内可以使用Lambda所在作用范围内所有可见的局部变量（包括Lambda所在类的this），并且是引用传递方式（相当于编译器自动为我们按引用传递了所有局部变量）。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4、this。函数体内可以使用Lambda所在类中的成员变量。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5、a。将a按值进行传递。按值进行传递时，函数体内不能修改传递进来的a的拷贝，因为默认情况下函数是const的。要修改传递进来的a的拷贝，可以添加mutable修饰符。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6、&amp;a。将a按引用进行传递。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7、a, &amp;b。将a按值进行传递，b按引用进行传递。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8、=，&amp;a, &amp;b。除a和b按引用进行传递外，其他参数都按值进行传递。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9、&amp;, a, b。除a和b按值进行传递外，其他参数都按引用进行传递。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 二、(操作符重载函数参数)，标识重载的()操作符的参数，没有参数时，这部分可以省略。参数可以通过按值（如：(a,b)）和按引用（如：(&amp;a,&amp;b)）两种方式进行传递。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   三、mutable或exception声明，这部分可以省略。按值传递函数对象参数时，加上mutable修饰符后，可以修改按值传递进来的拷贝（注意 是能修改拷贝，而不是值本身）。exception声明用于指定函数抛出的异常，如抛出整数类型的异常，可以使用throw(int)。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 四、-&gt;返回值类型，标识函数返回值的类型，当返回值为void，或者函数体中只有一处return的地方（此时编译器可以自动推断出返回值类型）时，这部分可以省略。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 五、{函数体}，标识函数的实现，这部分不能省略，但函数体可以为空。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 下面给出了一段示例代码，用于演示上述提到的各种情况，代码中有简单的注释可作为参考。 <div><div><a title="复制代码"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" /></a></div> <div><span style="color: #0000ff">class</span>&nbsp;CTest<br />{<br /><span style="color: #0000ff">public</span>:<br />&nbsp;CTest()&nbsp;:&nbsp;m_nData(<span style="color: #800080">20</span>)&nbsp;{&nbsp;NULL;&nbsp;}<br />&nbsp;<span style="color: #0000ff">void</span>&nbsp;TestLambda()<br />&nbsp;{<br />&nbsp;&nbsp;vector&lt;<span style="color: #0000ff">int</span>&gt;&nbsp;vctTemp;<br />&nbsp;&nbsp;vctTemp.push_back(<span style="color: #800080">1</span>);<br />&nbsp;&nbsp;vctTemp.push_back(<span style="color: #800080">2</span>);<br /><br />&nbsp;&nbsp;<span style="color: #008000">//</span><span style="color: #008000">&nbsp;无函数对象参数，输出：1&nbsp;2</span><span style="color: #008000"><br /></span>&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;for_each(vctTemp.begin(),&nbsp;vctTemp.end(),&nbsp;[](<span style="color: #0000ff">int</span>&nbsp;v){&nbsp;cout&nbsp;&lt;&lt;&nbsp;v&nbsp;&lt;&lt;&nbsp;endl;&nbsp;});<br />&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;<span style="color: #008000">//</span><span style="color: #008000">&nbsp;以值方式传递作用域内所有可见的局部变量（包括this），输出：11&nbsp;12</span><span style="color: #008000"><br /></span>&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">int</span>&nbsp;a&nbsp;=&nbsp;<span style="color: #800080">10</span>;<br />&nbsp;&nbsp;&nbsp;for_each(vctTemp.begin(),&nbsp;vctTemp.end(),&nbsp;[=](<span style="color: #0000ff">int</span>&nbsp;v){&nbsp;cout&nbsp;&lt;&lt;&nbsp;v+a&nbsp;&lt;&lt;&nbsp;endl;&nbsp;});<br />&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;<span style="color: #008000">//</span><span style="color: #008000">&nbsp;以引用方式传递作用域内所有可见的局部变量（包括this），输出：11&nbsp;13&nbsp;12</span><span style="color: #008000"><br /></span>&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">int</span>&nbsp;a&nbsp;=&nbsp;<span style="color: #800080">10</span>;<br />&nbsp;&nbsp;&nbsp;for_each(vctTemp.begin(),&nbsp;vctTemp.end(),&nbsp;[&amp;](<span style="color: #0000ff">int</span>&nbsp;v)mutable{&nbsp;cout&nbsp;&lt;&lt;&nbsp;v+a&nbsp;&lt;&lt;&nbsp;endl;&nbsp;a++;&nbsp;});<br />&nbsp;&nbsp;&nbsp;cout&nbsp;&lt;&lt;&nbsp;a&nbsp;&lt;&lt;&nbsp;endl;<br />&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;<span style="color: #008000">//</span><span style="color: #008000">&nbsp;以值方式传递局部变量a，输出：11&nbsp;13&nbsp;10</span><span style="color: #008000"><br /></span>&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">int</span>&nbsp;a&nbsp;=&nbsp;<span style="color: #800080">10</span>;<br />&nbsp;&nbsp;&nbsp;for_each(vctTemp.begin(),&nbsp;vctTemp.end(),&nbsp;[a](<span style="color: #0000ff">int</span>&nbsp;v)mutable{&nbsp;cout&nbsp;&lt;&lt;&nbsp;v+a&nbsp;&lt;&lt;&nbsp;endl;&nbsp;a++;&nbsp;});<br />&nbsp;&nbsp;&nbsp;cout&nbsp;&lt;&lt;&nbsp;a&nbsp;&lt;&lt;&nbsp;endl;<br />&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;<span style="color: #008000">//</span><span style="color: #008000">&nbsp;以引用方式传递局部变量a，输出：11&nbsp;13&nbsp;12</span><span style="color: #008000"><br /></span>&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">int</span>&nbsp;a&nbsp;=&nbsp;<span style="color: #800080">10</span>;<br />&nbsp;&nbsp;&nbsp;for_each(vctTemp.begin(),&nbsp;vctTemp.end(),&nbsp;[&amp;a](<span style="color: #0000ff">int</span>&nbsp;v){&nbsp;cout&nbsp;&lt;&lt;&nbsp;v+a&nbsp;&lt;&lt;&nbsp;endl;&nbsp;a++;&nbsp;});<br />&nbsp;&nbsp;&nbsp;cout&nbsp;&lt;&lt;&nbsp;a&nbsp;&lt;&lt;&nbsp;endl;<br />&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;<span style="color: #008000">//</span><span style="color: #008000">&nbsp;传递this，输出：21&nbsp;22</span><span style="color: #008000"><br /></span>&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;for_each(vctTemp.begin(),&nbsp;vctTemp.end(),&nbsp;[<span style="color: #0000ff">this</span>](<span style="color: #0000ff">int</span>&nbsp;v){&nbsp;cout&nbsp;&lt;&lt;&nbsp;v+m_nData&nbsp;&lt;&lt;&nbsp;endl;&nbsp;});<br />&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;<span style="color: #008000">//</span><span style="color: #008000">&nbsp;除b按引用传递外，其他均按值传递，输出：11&nbsp;12&nbsp;17</span><span style="color: #008000"><br /></span>&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">int</span>&nbsp;a&nbsp;=&nbsp;<span style="color: #800080">10</span>;<br />&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">int</span>&nbsp;b&nbsp;=&nbsp;<span style="color: #800080">15</span>;<br />&nbsp;&nbsp;&nbsp;for_each(vctTemp.begin(),&nbsp;vctTemp.end(),&nbsp;[=,&nbsp;&amp;b](<span style="color: #0000ff">int</span>&nbsp;v){&nbsp;cout&nbsp;&lt;&lt;&nbsp;v+a&nbsp;&lt;&lt;&nbsp;endl;&nbsp;b++;&nbsp;});<br />&nbsp;&nbsp;&nbsp;cout&nbsp;&lt;&lt;&nbsp;b&nbsp;&lt;&lt;&nbsp;endl;<br />&nbsp;&nbsp;}<br /><br /><br />&nbsp;&nbsp;<span style="color: #008000">//</span><span style="color: #008000">&nbsp;操作符重载函数参数按引用传递，输出：2&nbsp;3</span><span style="color: #008000"><br /></span>&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;for_each(vctTemp.begin(),&nbsp;vctTemp.end(),&nbsp;[](<span style="color: #0000ff">int</span>&nbsp;&amp;v){&nbsp;v++;&nbsp;});<br />&nbsp;&nbsp;&nbsp;for_each(vctTemp.begin(),&nbsp;vctTemp.end(),&nbsp;[](<span style="color: #0000ff">int</span>&nbsp;v){&nbsp;cout&nbsp;&lt;&lt;&nbsp;v&nbsp;&lt;&lt;&nbsp;endl;&nbsp;});<br />&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;<span style="color: #008000">//</span><span style="color: #008000">&nbsp;空的Lambda表达式</span><span style="color: #008000"><br /></span>&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;[](){}();<br />&nbsp;&nbsp;&nbsp;[]{}();<br />&nbsp;&nbsp;}<br />&nbsp;}<br /><br /><span style="color: #0000ff">private</span>:<br />&nbsp;<span style="color: #0000ff">int</span>&nbsp;m_nData;<br />};</div><div><a title="复制代码"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" /></a></div></div></div><img src ="http://www.cppblog.com/colorful/aggbug/210407.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/colorful/" target="_blank">多彩人生</a> 2015-04-21 10:39 <a href="http://www.cppblog.com/colorful/archive/2015/04/21/210407.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>qcjl lua project log</title><link>http://www.cppblog.com/colorful/archive/2015/03/01/209893.html</link><dc:creator>多彩人生</dc:creator><author>多彩人生</author><pubDate>Sun, 01 Mar 2015 03:55:00 GMT</pubDate><guid>http://www.cppblog.com/colorful/archive/2015/03/01/209893.html</guid><wfw:comment>http://www.cppblog.com/colorful/comments/209893.html</wfw:comment><comments>http://www.cppblog.com/colorful/archive/2015/03/01/209893.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/colorful/comments/commentRss/209893.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/colorful/services/trackbacks/209893.html</trackback:ping><description><![CDATA[2015/3/1<br />protoc-gen-lua 生成的lua又发现新的问题, main function has more than 200 local variables问题，网上搜索了一下，有相应的解决方法，据说还会有一个新的问题出来：不能用 repeated submessage,&nbsp; 建议用云风的pbc. 所以方案改为用云风的pbc<img src ="http://www.cppblog.com/colorful/aggbug/209893.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/colorful/" target="_blank">多彩人生</a> 2015-03-01 11:55 <a href="http://www.cppblog.com/colorful/archive/2015/03/01/209893.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>cocos2dx lua protobuf</title><link>http://www.cppblog.com/colorful/archive/2015/02/12/209802.html</link><dc:creator>多彩人生</dc:creator><author>多彩人生</author><pubDate>Thu, 12 Feb 2015 03:42:00 GMT</pubDate><guid>http://www.cppblog.com/colorful/archive/2015/02/12/209802.html</guid><wfw:comment>http://www.cppblog.com/colorful/comments/209802.html</wfw:comment><comments>http://www.cppblog.com/colorful/archive/2015/02/12/209802.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/colorful/comments/commentRss/209802.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/colorful/services/trackbacks/209802.html</trackback:ping><description><![CDATA[<div><div>http://blog.csdn.net/weyson/article/details/17024325</div><div>http://www.cppblog.com/colorful/archive/2015/01/17/209557.html</div><div>http://blog.csdn.net/w00w12l/article/details/39316321</div><br />protoc-gen-lua下载地址: <em><strong><a href="https://github.com/sean-lin/protoc-gen-lua" target="_blank"><span style="color:#0000FF;"></span></a></strong><a href="https://github.com/sean-lin/protoc-gen-lua" target="_blank"><span style="color:#0000FF;"></span></a></em><a href="https://github.com/sean-lin/protoc-gen-lua" target="_blank"><span style="color: #0000ff;">https://github.com/sean-lin/protoc-gen-lua</span></a><br /><br />1/ 先到protobuf的python目录下执行<br />&nbsp;&nbsp;&nbsp; python setup.py build<br />&nbsp;&nbsp;&nbsp; python setup.py install<br /><br />2/ 在protoc-gen-lua的plugin目录中新建protoc-gen-lua.bat, 内容如下:<br />@python 目录\protoc-gen-lua\plugin\protoc-gen-lua<br /><br />3/ 用protoc把proto文件生成lua文件<br />&nbsp; protoc --lua_out=./ --plugin=protoc-gen-lua="目录\protoc-gen-lua.bat"&nbsp; test.proto<br /><br />4/ 将protoc-gen-lua/protobuf下的pb.c 放到工程的Classes下, 并加入到c++工程中<br /><br />5/ 将protoc-gen-lua/protobuf上的所有lua文件放到工程的src目录(lua目录)下<br /><br />6/ AppDelegate.cpp 添加代码<br />extern "C"{<br />&nbsp;&nbsp;&nbsp; int luaopen_pb(lua_State* L);<br />}<br />在applicationDidFinishLaunching()中调用 luaopen_pb(state);<br /><br />---------------------------------------------------------------------------<br /><div>&nbsp;&nbsp;&nbsp; require "src/xy/person_pb" &nbsp;<br />&nbsp;&nbsp;&nbsp; local msg = person_pb.Person() &nbsp;<br />&nbsp;&nbsp;&nbsp; msg.id = 100&nbsp; &nbsp;<br />&nbsp;&nbsp;&nbsp; msg.name = "foo"&nbsp; &nbsp;<br />&nbsp;&nbsp;&nbsp; msg.email = "bar"&nbsp; &nbsp;<br /><br />&nbsp;&nbsp;&nbsp; local pb_data = msg:SerializeToString()&nbsp; -- Parse Example &nbsp;<br />&nbsp;&nbsp;&nbsp; print("create:", msg.id, msg.name, msg.email, pb_data) &nbsp;<br /><br /><br />&nbsp;&nbsp;&nbsp; local msg = person_pb.Person()&nbsp; &nbsp;<br />&nbsp;&nbsp;&nbsp; msg:ParseFromString(pb_data)&nbsp; &nbsp;<br />&nbsp;&nbsp;&nbsp; print("parser:", msg.id, msg.name, msg.email, pb_data)</div><br />---------------------------------------------------------------------------<br />移植到android 记得将pb.c添加到proj.android\jni\Android.mk中<br /><br />&nbsp;</div><img src ="http://www.cppblog.com/colorful/aggbug/209802.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/colorful/" target="_blank">多彩人生</a> 2015-02-12 11:42 <a href="http://www.cppblog.com/colorful/archive/2015/02/12/209802.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>error C2061: 语法错误: 标识符“wctomb”</title><link>http://www.cppblog.com/colorful/archive/2015/02/06/209754.html</link><dc:creator>多彩人生</dc:creator><author>多彩人生</author><pubDate>Fri, 06 Feb 2015 02:37:00 GMT</pubDate><guid>http://www.cppblog.com/colorful/archive/2015/02/06/209754.html</guid><wfw:comment>http://www.cppblog.com/colorful/comments/209754.html</wfw:comment><comments>http://www.cppblog.com/colorful/archive/2015/02/06/209754.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/colorful/comments/commentRss/209754.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/colorful/services/trackbacks/209754.html</trackback:ping><description><![CDATA[<div>1&gt;&nbsp;&nbsp;pb.c<br /> 1&gt;e:\test003\test101\src\pb.c&nbsp;:&nbsp;warning&nbsp;C4819:&nbsp;该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为&nbsp;Unicode&nbsp;格式以防止数据丢失<br /> 1&gt;c:\program&nbsp;files&nbsp;(x86)\microsoft&nbsp;visual&nbsp;studio&nbsp;12.0\vc\include\cstdlib(18):&nbsp;error&nbsp;C2054:&nbsp;在&#8220;using&#8221;之后应输入&#8220;(&#8221;<br /> 1&gt;c:\program&nbsp;files&nbsp;(x86)\microsoft&nbsp;visual&nbsp;studio&nbsp;12.0\vc\include\cstdlib(18):&nbsp;error&nbsp;C2061:&nbsp;语法错误:&nbsp;标识符&#8220;using&#8221;<br /> 1&gt;c:\program&nbsp;files&nbsp;(x86)\microsoft&nbsp;visual&nbsp;studio&nbsp;12.0\vc\include\cstdlib(19):&nbsp;error&nbsp;C2061:&nbsp;语法错误:&nbsp;标识符&#8220;using&#8221;<br /> 1&gt;c:\program&nbsp;files&nbsp;(x86)\microsoft&nbsp;visual&nbsp;studio&nbsp;12.0\vc\include\cstdlib(19):&nbsp;error&nbsp;C2061:&nbsp;语法错误:&nbsp;标识符&#8220;abs&#8221;<br /> 1&gt;c:\program&nbsp;files&nbsp;(x86)\microsoft&nbsp;visual&nbsp;studio&nbsp;12.0\vc\include\cstdlib(19):&nbsp;error&nbsp;C2059:&nbsp;语法错误:&#8220;;&#8221;<br /> 1&gt;c:\program&nbsp;files&nbsp;(x86)\microsoft&nbsp;visual&nbsp;studio&nbsp;12.0\vc\include\cstdlib(19):&nbsp;error&nbsp;C2061:&nbsp;语法错误:&nbsp;标识符&#8220;atexit&#8221;<br /> 1&gt;c:\program&nbsp;files&nbsp;(x86)\microsoft&nbsp;visual&nbsp;studio&nbsp;12.0\vc\include\cstdlib(20):&nbsp;error&nbsp;C2061:&nbsp;语法错误:&nbsp;标识符&#8220;atof&#8221;<br /> 1&gt;c:\program&nbsp;files&nbsp;(x86)\microsoft&nbsp;visual&nbsp;studio&nbsp;12.0\vc\include\cstdlib(20):&nbsp;error&nbsp;C2059:&nbsp;语法错误:&#8220;;&#8221;<br /> 1&gt;c:\program&nbsp;files&nbsp;(x86)\microsoft&nbsp;visual&nbsp;studio&nbsp;12.0\vc\include\cstdlib(20):&nbsp;error&nbsp;C2061:&nbsp;语法错误:&nbsp;标识符&#8220;atoi&#8221;<br /> 1&gt;c:\program&nbsp;files&nbsp;(x86)\microsoft&nbsp;visual&nbsp;studio&nbsp;12.0\vc\include\cstdlib(20):&nbsp;error&nbsp;C2061:&nbsp;语法错误:&nbsp;标识符&#8220;atol&#8221;<br /> 1&gt;c:\program&nbsp;files&nbsp;(x86)\microsoft&nbsp;visual&nbsp;studio&nbsp;12.0\vc\include\cstdlib(21):&nbsp;error&nbsp;C2061:&nbsp;语法错误:&nbsp;标识符&#8220;bsearch&#8221;<br /> 1&gt;c:\program&nbsp;files&nbsp;(x86)\microsoft&nbsp;visual&nbsp;studio&nbsp;12.0\vc\include\cstdlib(21):&nbsp;error&nbsp;C2059:&nbsp;语法错误:&#8220;;&#8221;<br /> 1&gt;c:\program&nbsp;files&nbsp;(x86)\microsoft&nbsp;visual&nbsp;studio&nbsp;12.0\vc\include\cstdlib(21):&nbsp;error&nbsp;C2061:&nbsp;语法错误:&nbsp;标识符&#8220;calloc&#8221;<br /> 1&gt;c:\program&nbsp;files&nbsp;(x86)\microsoft&nbsp;visual&nbsp;studio&nbsp;12.0\vc\include\cstdlib(21):&nbsp;error&nbsp;C2061:&nbsp;语法错误:&nbsp;标识符&#8220;div&#8221;<br /> 1&gt;c:\program&nbsp;files&nbsp;(x86)\microsoft&nbsp;visual&nbsp;studio&nbsp;12.0\vc\include\cstdlib(22):&nbsp;error&nbsp;C2061:&nbsp;语法错误:&nbsp;标识符&#8220;exit&#8221;<br /> 1&gt;c:\program&nbsp;files&nbsp;(x86)\microsoft&nbsp;visual&nbsp;studio&nbsp;12.0\vc\include\cstdlib(22):&nbsp;error&nbsp;C2059:&nbsp;语法错误:&#8220;;&#8221;<br /> 1&gt;c:\program&nbsp;files&nbsp;(x86)\microsoft&nbsp;visual&nbsp;studio&nbsp;12.0\vc\include\cstdlib(22):&nbsp;error&nbsp;C2061:&nbsp;语法错误:&nbsp;标识符&#8220;free&#8221;<br /> 1&gt;c:\program&nbsp;files&nbsp;(x86)\microsoft&nbsp;visual&nbsp;studio&nbsp;12.0\vc\include\cstdlib(23):&nbsp;error&nbsp;C2061:&nbsp;语法错误:&nbsp;标识符&#8220;labs&#8221;<br /> 1&gt;c:\program&nbsp;files&nbsp;(x86)\microsoft&nbsp;visual&nbsp;studio&nbsp;12.0\vc\include\cstdlib(23):&nbsp;error&nbsp;C2059:&nbsp;语法错误:&#8220;;&#8221;<br /> 1&gt;c:\program&nbsp;files&nbsp;(x86)\microsoft&nbsp;visual&nbsp;studio&nbsp;12.0\vc\include\cstdlib(23):&nbsp;error&nbsp;C2061:&nbsp;语法错误:&nbsp;标识符&#8220;ldiv&#8221;<br /> 1&gt;c:\program&nbsp;files&nbsp;(x86)\microsoft&nbsp;visual&nbsp;studio&nbsp;12.0\vc\include\cstdlib(23):&nbsp;error&nbsp;C2061:&nbsp;语法错误:&nbsp;标识符&#8220;malloc&#8221;<br /> 1&gt;c:\program&nbsp;files&nbsp;(x86)\microsoft&nbsp;visual&nbsp;studio&nbsp;12.0\vc\include\cstdlib(24):&nbsp;error&nbsp;C2061:&nbsp;语法错误:&nbsp;标识符&#8220;mblen&#8221;<br /> 1&gt;c:\program&nbsp;files&nbsp;(x86)\microsoft&nbsp;visual&nbsp;studio&nbsp;12.0\vc\include\cstdlib(24):&nbsp;error&nbsp;C2059:&nbsp;语法错误:&#8220;;&#8221;<br /> 1&gt;c:\program&nbsp;files&nbsp;(x86)\microsoft&nbsp;visual&nbsp;studio&nbsp;12.0\vc\include\cstdlib(24):&nbsp;error&nbsp;C2061:&nbsp;语法错误:&nbsp;标识符&#8220;mbstowcs&#8221;<br /> 1&gt;c:\program&nbsp;files&nbsp;(x86)\microsoft&nbsp;visual&nbsp;studio&nbsp;12.0\vc\include\cstdlib(24):&nbsp;error&nbsp;C2061:&nbsp;语法错误:&nbsp;标识符&#8220;mbtowc&#8221;<br /> 1&gt;c:\program&nbsp;files&nbsp;(x86)\microsoft&nbsp;visual&nbsp;studio&nbsp;12.0\vc\include\cstdlib(25):&nbsp;error&nbsp;C2061:&nbsp;语法错误:&nbsp;标识符&#8220;qsort&#8221;<br /> 1&gt;c:\program&nbsp;files&nbsp;(x86)\microsoft&nbsp;visual&nbsp;studio&nbsp;12.0\vc\include\cstdlib(25):&nbsp;error&nbsp;C2059:&nbsp;语法错误:&#8220;;&#8221;<br /> 1&gt;c:\program&nbsp;files&nbsp;(x86)\microsoft&nbsp;visual&nbsp;studio&nbsp;12.0\vc\include\cstdlib(25):&nbsp;error&nbsp;C2061:&nbsp;语法错误:&nbsp;标识符&#8220;rand&#8221;<br /> 1&gt;c:\program&nbsp;files&nbsp;(x86)\microsoft&nbsp;visual&nbsp;studio&nbsp;12.0\vc\include\cstdlib(25):&nbsp;error&nbsp;C2061:&nbsp;语法错误:&nbsp;标识符&#8220;realloc&#8221;<br /> 1&gt;c:\program&nbsp;files&nbsp;(x86)\microsoft&nbsp;visual&nbsp;studio&nbsp;12.0\vc\include\cstdlib(26):&nbsp;error&nbsp;C2061:&nbsp;语法错误:&nbsp;标识符&#8220;srand&#8221;<br /> 1&gt;c:\program&nbsp;files&nbsp;(x86)\microsoft&nbsp;visual&nbsp;studio&nbsp;12.0\vc\include\cstdlib(26):&nbsp;error&nbsp;C2059:&nbsp;语法错误:&#8220;;&#8221;<br /> 1&gt;c:\program&nbsp;files&nbsp;(x86)\microsoft&nbsp;visual&nbsp;studio&nbsp;12.0\vc\include\cstdlib(26):&nbsp;error&nbsp;C2061:&nbsp;语法错误:&nbsp;标识符&#8220;strtod&#8221;<br /> 1&gt;c:\program&nbsp;files&nbsp;(x86)\microsoft&nbsp;visual&nbsp;studio&nbsp;12.0\vc\include\cstdlib(26):&nbsp;error&nbsp;C2061:&nbsp;语法错误:&nbsp;标识符&#8220;strtol&#8221;<br /> 1&gt;c:\program&nbsp;files&nbsp;(x86)\microsoft&nbsp;visual&nbsp;studio&nbsp;12.0\vc\include\cstdlib(27):&nbsp;error&nbsp;C2061:&nbsp;语法错误:&nbsp;标识符&#8220;strtoul&#8221;<br /> 1&gt;c:\program&nbsp;files&nbsp;(x86)\microsoft&nbsp;visual&nbsp;studio&nbsp;12.0\vc\include\cstdlib(27):&nbsp;error&nbsp;C2059:&nbsp;语法错误:&#8220;;&#8221;<br /> 1&gt;c:\program&nbsp;files&nbsp;(x86)\microsoft&nbsp;visual&nbsp;studio&nbsp;12.0\vc\include\cstdlib(28):&nbsp;error&nbsp;C2061:&nbsp;语法错误:&nbsp;标识符&#8220;wcstombs&#8221;<br /> 1&gt;c:\program&nbsp;files&nbsp;(x86)\microsoft&nbsp;visual&nbsp;studio&nbsp;12.0\vc\include\cstdlib(28):&nbsp;error&nbsp;C2059:&nbsp;语法错误:&#8220;;&#8221;<br /> 1&gt;c:\program&nbsp;files&nbsp;(x86)\microsoft&nbsp;visual&nbsp;studio&nbsp;12.0\vc\include\cstdlib(28):&nbsp;error&nbsp;C2061:&nbsp;语法错误:&nbsp;标识符&#8220;wctomb&#8221;<br /> 1&gt;c:\program&nbsp;files&nbsp;(x86)\microsoft&nbsp;visual&nbsp;studio&nbsp;12.0\vc\include\cstdlib(30):&nbsp;error&nbsp;C2054:&nbsp;在&#8220;using&#8221;之后应输入&#8220;(&#8221;<br /> 1&gt;c:\program&nbsp;files&nbsp;(x86)\microsoft&nbsp;visual&nbsp;studio&nbsp;12.0\vc\include\cstdlib(33):&nbsp;error&nbsp;C2061:&nbsp;语法错误:&nbsp;标识符&#8220;using&#8221;<br /> 1&gt;c:\program&nbsp;files&nbsp;(x86)\microsoft&nbsp;visual&nbsp;studio&nbsp;12.0\vc\include\cstdlib(34):&nbsp;error&nbsp;C2061:&nbsp;语法错误:&nbsp;标识符&#8220;system&#8221;<br /> 1&gt;c:\program&nbsp;files&nbsp;(x86)\microsoft&nbsp;visual&nbsp;studio&nbsp;12.0\vc\include\cstdlib(34):&nbsp;error&nbsp;C2059:&nbsp;语法错误:&#8220;;&#8221;<br /> 1&gt;c:\program&nbsp;files&nbsp;(x86)\microsoft&nbsp;visual&nbsp;studio&nbsp;12.0\vc\include\cstdlib(37):&nbsp;error&nbsp;C2061:&nbsp;语法错误:&nbsp;标识符&#8220;atoll&#8221;<br /> 1&gt;c:\program&nbsp;files&nbsp;(x86)\microsoft&nbsp;visual&nbsp;studio&nbsp;12.0\vc\include\cstdlib(37):&nbsp;error&nbsp;C2059:&nbsp;语法错误:&#8220;;&#8221;<br /><div></div>解决方法:<br /><div><div><div><div><div>右击.c文件，c/c++/高级，强制包含文件，如果有algorithm或者其他的，去掉，重新编译 </div></div></div></div></div></div><img src ="http://www.cppblog.com/colorful/aggbug/209754.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/colorful/" target="_blank">多彩人生</a> 2015-02-06 10:37 <a href="http://www.cppblog.com/colorful/archive/2015/02/06/209754.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>fatal error C1853: "Debug\sift.pch"预编译头文件来自编译器的早期版本</title><link>http://www.cppblog.com/colorful/archive/2015/02/05/209745.html</link><dc:creator>多彩人生</dc:creator><author>多彩人生</author><pubDate>Thu, 05 Feb 2015 10:32:00 GMT</pubDate><guid>http://www.cppblog.com/colorful/archive/2015/02/05/209745.html</guid><wfw:comment>http://www.cppblog.com/colorful/comments/209745.html</wfw:comment><comments>http://www.cppblog.com/colorful/archive/2015/02/05/209745.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/colorful/comments/commentRss/209745.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/colorful/services/trackbacks/209745.html</trackback:ping><description><![CDATA[<div><pre id="best-content-1299104064"  mb-10"="">该错误是因为当项目中混合了 .cpp 和 .c 文件时，编译器会对它们采取不同的编译方式（主要是因为对函数声明的处理方式不同），<br />因而不能共用一个预编译头文件。在 VC++ 中，默认的预编译头文件是针对 C++ 的 (stdafx.h 和 stdafx.cpp），当然也可以创建针对 C 的预编译头。<br /> <br />      方法：将少数的不同类文件设为不使用预编译头是比较平衡的做法，方法是：对于 VC++6.0，在 FileView 里对要取消预编译头的 .c (或 .cpp) 文件点右键，<br />选择 settings，在弹出的对话框右边选择 category 为 precompiled headers，再设置选项为 not using ...；<br />（对于 VS2005，则在 solution explorer 中对相应文件点右键选择 properties，在 precompiled headers 项下设置 not using... 即可。如果需要设置多个文件，<br />则可以按住 Ctrl 键再同时选中这些文件并设置）<br />PS：解释如下点击项目 点击属性 然后选择C/C++   预编译头 创建使用头文件 不使用预编译头文件<br />（解决方案资源管理器-右击需要排除的c或cpp文件]-弹出属性菜单-展开C/C++-预编译头-创建/使用预编译头-选择不适用预编译头）</pre></div><img src ="http://www.cppblog.com/colorful/aggbug/209745.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/colorful/" target="_blank">多彩人生</a> 2015-02-05 18:32 <a href="http://www.cppblog.com/colorful/archive/2015/02/05/209745.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>error C2275: “XXX”: 将此类型用作表达式非法</title><link>http://www.cppblog.com/colorful/archive/2015/02/05/209744.html</link><dc:creator>多彩人生</dc:creator><author>多彩人生</author><pubDate>Thu, 05 Feb 2015 10:30:00 GMT</pubDate><guid>http://www.cppblog.com/colorful/archive/2015/02/05/209744.html</guid><wfw:comment>http://www.cppblog.com/colorful/comments/209744.html</wfw:comment><comments>http://www.cppblog.com/colorful/archive/2015/02/05/209744.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/colorful/comments/commentRss/209744.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/colorful/services/trackbacks/209744.html</trackback:ping><description><![CDATA[<div>在移植c++代码到c的时候，经常会出现一个奇怪的错误，<br /> error C2275: &#8220;XXX&#8221;: 将此类型用作表达式非法<br /> <br /> 表达式非法，这个错误是由于c的编译器要求将变量的申明放在一个函数块的头部，而c++没有这样的要求造成的。<br /> <br /> <br /> 解决的办法就是把变量的申明全部放在变量的生存块的开始。</div><img src ="http://www.cppblog.com/colorful/aggbug/209744.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/colorful/" target="_blank">多彩人生</a> 2015-02-05 18:30 <a href="http://www.cppblog.com/colorful/archive/2015/02/05/209744.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Quick-Cocos2d-x 集成 Google protobuf 方法</title><link>http://www.cppblog.com/colorful/archive/2015/01/17/209557.html</link><dc:creator>多彩人生</dc:creator><author>多彩人生</author><pubDate>Sat, 17 Jan 2015 08:08:00 GMT</pubDate><guid>http://www.cppblog.com/colorful/archive/2015/01/17/209557.html</guid><wfw:comment>http://www.cppblog.com/colorful/comments/209557.html</wfw:comment><comments>http://www.cppblog.com/colorful/archive/2015/01/17/209557.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/colorful/comments/commentRss/209557.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/colorful/services/trackbacks/209557.html</trackback:ping><description><![CDATA[<div>http://cn.cocos2d-x.org/tutorial/show?id=506</div><br /><div><div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	本文将向您介绍Quick-Cocos2d-x集成google protobuf的方法。 &nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	<strong>第一步 &nbsp; 需要最新的protobuf 类库和解析程序。&nbsp;</strong>  </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	下载地址：<a href="https://github.com/sean-lin/protoc-gen-lua" target="_blank"><span style="color:#0000FF;">https://github.com/sean-lin/protoc-gen-lua</span></a>  </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	git clone&nbsp;<a href="https://github.com/sean-lin/protoc-gen-lua.git" target="_blank"><span style="color:#0000FF;">https://github.com/sean-lin/protoc-gen-lua.git</span></a>&nbsp;到任意的一个地方 </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <p style="color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	然后，可以得到重要的两个目录 </p> <p style="color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	<span style="line-height:1.5;"> </span></p><div><div id="highlighter_782255"  cpp"=""><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div><div number2="" index1=""  alt1"="">2</div></td><td><div><div number1="" index0=""  alt2"=""><code plain"="">protoc-gen-lua/plugin/&nbsp; </code></div><div number2="" index1=""  alt1"=""><code plain"="">protoc-gen-lua/protobuf/</code></div></div></td></tr></tbody></table></div></div> &nbsp;  <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	<strong>第二步， 需要使用protoc &#8212;lua_out=. 这种方法， 将我们自己的*.proto 的文件解析成lua文件</strong>  </div> <p style="color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	plugin目录是提供将buffer 文件解析成lua 版本的类库， 需要python 支持。 &nbsp;如果已经编译了google 官方的protoc 那个程序， 只需要在系统PATH环境变量总追加plugin目录就好: </p> <p style="color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> </p><div><div id="highlighter_807689"  cpp"=""><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div></td><td><div><div number1="" index0=""  alt2"=""><code plain"="">export PATH={protoc-gen-lua DIR }/plugin:$PATH</code></div></div></td></tr></tbody></table></div></div>  <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	关于protoc的编译另请google . </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	如果解析不出lua文件来， 可以手动志信一下plugin/protoc-gen-lua的程序， 他应该是+x 的权限(chmod +x plugin/protoc-gen-lua) </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	细节的安装步骤可以参考&nbsp;<a href="https://code.google.com/p/protoc-gen-lua/" target="_blank"><span style="color:#0000FF;">https://code.google.com/p/protoc-gen-lua/</span></a>  </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	<strong>第三步 ， 将protobuf 集成到quick 中</strong>  </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	protoc-gen-lua/protobuf/ 目录就是要编译到quick-cocos2d-x目录里面的部分。&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	现在， 我们只需要 protoc-gen-lua/protobuf/pb.c 这个文件&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <p style="color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	先确定自己的quick-cocos2d-x lua扩展目录： </p> <p style="color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> </p><div><div id="highlighter_519328"  cpp"=""><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div></td><td><div><div number1="" index0=""  alt2"=""><code plain"="">/quick-cocos2d-x/lib/cocos2d-x/scripting/lua/lua_extensions/</code></div></div></td></tr></tbody></table></div></div>  <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	所有lua 的c/c++现成扩展,都可以直接放到这里。&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp;&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	将pb.c这个文件复制到 lua_extension目录下， 最好独立一个目录， 免得扩展多了乱。&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp;&nbsp; </div> <p style="color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	这是我的目录结构: </p> <p style="color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> </p><div><div id="highlighter_734895"  cpp"=""><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div></td><td><div><div number1="" index0=""  alt2"=""><code plain"="">./quick-cocos2d-x/lib/cocos2d-x/scripting/lua/lua_extensions/protobuf/pb.c</code></div></div></td></tr></tbody></table></div></div>  <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp;&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	然后开始修改扩展程序配置文件, lua_extensions.c </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <p style="color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	路径为： </p> <p style="color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> </p><div><div id="highlighter_466030"  cpp"=""><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div></td><td><div><div number1="" index0=""  alt2"=""><code plain"="">./quick-cocos2d-x/lib/cocos2d-x/scripting/lua/lua_extensions/lua_extensions.c</code></div></div></td></tr></tbody></table></div></div>  <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <p style="color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	目前是一个不足60行的小文件， 我打算全部贴进来： </p> <p style="color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> </p><div><div id="highlighter_924060"  cpp"=""><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div><div number2="" index1=""  alt1"="">2</div><div number3="" index2=""  alt2"="">3</div><div number4="" index3=""  alt1"="">4</div><div number5="" index4=""  alt2"="">5</div><div number6="" index5=""  alt1"="">6</div><div number7="" index6=""  alt2"="">7</div><div number8="" index7=""  alt1"="">8</div><div number9="" index8=""  alt2"="">9</div><div number10="" index9=""  alt1"="">10</div><div number11="" index10=""  alt2"="">11</div><div number12="" index11=""  alt1"="">12</div><div number13="" index12=""  alt2"="">13</div><div number14="" index13=""  alt1"="">14</div><div number15="" index14=""  alt2"="">15</div><div number16="" index15=""  alt1"="">16</div><div number17="" index16=""  alt2"="">17</div><div number18="" index17=""  alt1"="">18</div><div number19="" index18=""  alt2"="">19</div><div number20="" index19=""  alt1"="">20</div><div number21="" index20=""  alt2"="">21</div><div number22="" index21=""  alt1"="">22</div><div number23="" index22=""  alt2"="">23</div><div number24="" index23=""  alt1"="">24</div><div number25="" index24=""  alt2"="">25</div><div number26="" index25=""  alt1"="">26</div><div number27="" index26=""  alt2"="">27</div><div number28="" index27=""  alt1"="">28</div><div number29="" index28=""  alt2"="">29</div><div number30="" index29=""  alt1"="">30</div><div number31="" index30=""  alt2"="">31</div><div number32="" index31=""  alt1"="">32</div><div number33="" index32=""  alt2"="">33</div><div number34="" index33=""  alt1"="">34</div><div number35="" index34=""  alt2"="">35</div><div number36="" index35=""  alt1"="">36</div><div number37="" index36=""  alt2"="">37</div><div number38="" index37=""  alt1"="">38</div><div number39="" index38=""  alt2"="">39</div><div number40="" index39=""  alt1"="">40</div><div number41="" index40=""  alt2"="">41</div><div number42="" index41=""  alt1"="">42</div><div number43="" index42=""  alt2"="">43</div><div number44="" index43=""  alt1"="">44</div><div number45="" index44=""  alt2"="">45</div><div number46="" index45=""  alt1"="">46</div><div number47="" index46=""  alt2"="">47</div><div number48="" index47=""  alt1"="">48</div><div number49="" index48=""  alt2"="">49</div><div number50="" index49=""  alt1"="">50</div><div number51="" index50=""  alt2"="">51</div><div number52="" index51=""  alt1"="">52</div><div number53="" index52=""  alt2"="">53</div><div number54="" index53=""  alt1"="">54</div><div number55="" index54=""  alt2"="">55</div><div number56="" index55=""  alt1"="">56</div><div number57="" index56=""  alt2"="">57</div><div number58="" index57=""  alt1"="">58</div><div number59="" index58=""  alt2"="">59</div><div number60="" index59=""  alt1"="">60</div><div number61="" index60=""  alt2"="">61</div><div number62="" index61=""  alt1"="">62</div><div number63="" index62=""  alt2"="">63</div><div number64="" index63=""  alt1"="">64</div><div number65="" index64=""  alt2"="">65</div><div number66="" index65=""  alt1"="">66</div><div number67="" index66=""  alt2"="">67</div><div number68="" index67=""  alt1"="">68</div><div number69="" index68=""  alt2"="">69</div><div number70="" index69=""  alt1"="">70</div></td><td><div><div number1="" index0=""  alt2"=""><code preprocessor"="">#include "lua_extensions.h"&nbsp; </code></div><div number2="" index1=""  alt1"=""><code spaces"="">&nbsp;&nbsp;</code>&nbsp;</div><div number3="" index2=""  alt2"=""><code preprocessor"="">#if __cplusplus&nbsp; </code></div><div number4="" index3=""  alt1"=""><code keyword=""  bold"="">extern</code> <code string"="">"C"</code> <code plain"="">{&nbsp; </code></div><div number5="" index4=""  alt2"=""><code preprocessor"="">#endif&nbsp; </code></div><div number6="" index5=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number7="" index6=""  alt2"=""><code comments"="">// cjson&nbsp; </code></div><div number8="" index7=""  alt1"=""><code preprocessor"="">#include "cjson/lua_cjson.h"&nbsp; </code></div><div number9="" index8=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number10="" index9=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number11="" index10=""  alt2"=""><code comments"="">// zlib&nbsp; </code></div><div number12="" index11=""  alt1"=""><code preprocessor"="">#include "zlib/lua_zlib.h"&nbsp; </code></div><div number13="" index12=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number14="" index13=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number15="" index14=""  alt2"=""><code comments"="">// lpack&nbsp; </code></div><div number16="" index15=""  alt1"=""><code preprocessor"="">#include "lpack/lpack.h"&nbsp; </code></div><div number17="" index16=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number18="" index17=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number19="" index18=""  alt2"=""><code comments"="">// socket&nbsp; </code></div><div number20="" index19=""  alt1"=""><code preprocessor"="">#include "socket/luasocket.h"&nbsp; </code></div><div number21="" index20=""  alt2"=""><code preprocessor"="">#include "socket/mime.h"&nbsp; </code></div><div number22="" index21=""  alt1"=""><code preprocessor"="">#include "socket/socket_scripts.h"&nbsp; </code></div><div number23="" index22=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number24="" index23=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number25="" index24=""  alt2"=""><code comments"="">// filesystem&nbsp; </code></div><div number26="" index25=""  alt1"=""><code preprocessor"="">#include "filesystem/lfs.h"&nbsp; </code></div><div number27="" index26=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number28="" index27=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number29="" index28=""  alt2"=""><code comments"="">// lsqlite3&nbsp; </code></div><div number30="" index29=""  alt1"=""><code preprocessor"="">#include "lsqlite3/lsqlite3.h"&nbsp; </code></div><div number31="" index30=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number32="" index31=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number33="" index32=""  alt2"=""><code preprocessor"="">#include "protobuf/pb.c"&nbsp;&nbsp; //引用protobuf 库文件&nbsp; </code></div><div number34="" index33=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number35="" index34=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number36="" index35=""  alt1"=""><code keyword=""  bold"="">static</code> <code plain"="">luaL_Reg luax_exts[] = {&nbsp; </code></div><div number37="" index36=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">{</code><code string"="">"cjson"</code><code plain"="">, luaopen_cjson_safe},&nbsp; </code></div><div number38="" index37=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">{</code><code string"="">"zlib"</code><code plain"="">, luaopen_zlib},&nbsp; </code></div><div number39="" index38=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">{</code><code string"="">"pack"</code><code plain"="">, luaopen_pack},&nbsp; </code></div><div number40="" index39=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">{</code><code string"="">"socket.core"</code><code plain"="">, luaopen_socket_core},&nbsp; </code></div><div number41="" index40=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">{</code><code string"="">"mime.core"</code><code plain"="">, luaopen_mime_core},&nbsp; </code></div><div number42="" index41=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">{</code><code string"="">"lfs"</code><code plain"="">, luaopen_lfs},&nbsp; </code></div><div number43="" index42=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">{</code><code string"="">"lsqlite3"</code><code plain"="">, luaopen_lsqlite3},&nbsp; </code></div><div number44="" index43=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">{NULL, NULL}&nbsp; </code></div><div number45="" index44=""  alt2"=""><code plain"="">};&nbsp; </code></div><div number46="" index45=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number47="" index46=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number48="" index47=""  alt1"=""><code keyword=""  bold"="">void</code> <code plain"="">luaopen_lua_extensions(lua_State *L)&nbsp; </code></div><div number49="" index48=""  alt2"=""><code plain"="">{&nbsp; </code></div><div number50="" index49=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code comments"="">// load extensions&nbsp; </code></div><div number51="" index50=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">luaL_Reg* lib = luax_exts;&nbsp; </code></div><div number52="" index51=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">lua_getglobal(L, </code><code string"="">"package"</code><code plain"="">);&nbsp; </code></div><div number53="" index52=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">lua_getfield(L, -1, </code><code string"="">"preload"</code><code plain"="">);&nbsp; </code></div><div number54="" index53=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code keyword=""  bold"="">for</code> <code plain"="">(; lib-&gt;func; lib++)&nbsp; </code></div><div number55="" index54=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">{&nbsp; </code></div><div number56="" index55=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">lua_pushcfunction(L, lib-&gt;func);&nbsp; </code></div><div number57="" index56=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">lua_setfield(L, -2, lib-&gt;name);&nbsp; </code></div><div number58="" index57=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">}&nbsp; </code></div><div number59="" index58=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">lua_pop(L, 2);&nbsp; </code></div><div number60="" index59=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number61="" index60=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number62="" index61=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code comments"="">// load extensions script&nbsp; </code></div><div number63="" index62=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">luaopen_socket_scripts(L);&nbsp; </code></div><div number64="" index63=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">luaopen_pb(L);&nbsp;&nbsp; </code><code comments"="">//这是加入的protobuf 扩展注册名&nbsp; </code></div><div number65="" index64=""  alt2"=""><code plain"="">}&nbsp; </code></div><div number66="" index65=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number67="" index66=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number68="" index67=""  alt1"=""><code preprocessor"="">#if __cplusplus&nbsp; </code></div><div number69="" index68=""  alt2"=""><code plain"="">} </code><code comments"="">// extern "C"&nbsp; </code></div><div number70="" index69=""  alt1"=""><code preprocessor"="">#endif</code></div></div></td></tr></tbody></table></div></div>  <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	至此 ， protobuf 扩展部分就算扩展完成了。&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	确认是否成功支持 ， 可以在quick 项目最先被调用的lua文件中追加 require "pb" 做测试。&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	*但这时候通过protoc 转码后得到的lua文件还不能被解析。&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	<strong>第四步 从项目中包含protobuf的 lua库</strong>  </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	protoc-gen-lua/protobuf/这个目录下面， 还有大量的.lua文件， 是用来支持proto转码后的文件解析调用的。 不能少了这些文件。&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	复制protoc-gen-lua/protobuf文件夹 到项目中 scripts目录下。 &nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp;&nbsp; </div> <p style="color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	目录结构应该是这样的： </p> <p style="color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> </p><div><div id="highlighter_997850"  cpp"=""><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div></td><td><div><div number1="" index0=""  alt2"=""><code plain"="">[PROJECT]/scripts/protobuf/*.lua</code></div></div></td></tr></tbody></table></div></div>  <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	然后， 需要告诉框架，从哪里可以引用到它。&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <p style="color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	修改main.lua 在require("appxxxxxx") 上面 ， 加入下面的代码： </p> <p style="color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> </p><div><div id="highlighter_501035"  cpp"=""><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div></td><td><div><div number1="" index0=""  alt2"=""><code plain"="">package.path = package.path .. </code><code string"="">";./protobuf/?.lua;./scripts/protobuf/?.lua;"</code></div></div></td></tr></tbody></table></div></div>  <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	这个方法， 能保证程序在被编译到手机之后仍然可以继续访问这个库。&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp;&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	***千万别把转码的proto文件放到[PROJECT]/scripts/protobuf 目录里面.不信可以试试。 </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	现在， 项目支持protobuf 文件的解析了。 </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	<strong>第五步 &nbsp;重新编译player-x</strong>  </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	如果不习惯用player-x调试， 这个步骤不是必须的。&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <p style="color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	进入player-x qt源码目录 ： </p> <p style="color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> </p><div><div id="highlighter_820149"  cpp"=""><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div></td><td><div><div number1="" index0=""  alt2"=""><code plain"="">cd quick-cocos2d-x/player/proj.qt</code></div></div></td></tr></tbody></table></div></div>  <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <p style="color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	使用qmake 文件执行quick-x.pro 文件&nbsp; </p> <p style="color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> </p><div><div id="highlighter_314279"  cpp"=""><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div></td><td><div><div number1="" index0=""  alt2"=""><code plain"="">qmake ./quick-x.pro</code></div></div></td></tr></tbody></table></div></div>  <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	继续： </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	make&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	等待结束， 将得到的quick-x-player文件，&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	放到：quick-cocos2d-x/player/bin/mac/ 目录下， 这样sublime text 装QuickXDev 扩展的直接可以用。&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp;&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	**如果是mac os 10.9 系统， 可能编译不过去player-x程序。 我遇到了这个问题。&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	会提示错误 &nbsp;pb.c:28:10: fatal error: 'endian.h' file not found&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <p style="color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	如果错误信息相同， 修改文件: </p> <p style="color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> </p><div><div id="highlighter_874678"  cpp"=""><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div></td><td><div><div number1="" index0=""  alt2"=""><code plain"="">./quick-cocos2d-x/lib/cocos2d-x/scripting/lua/lua_extensions/protobuf/pb.c</code></div></div></td></tr></tbody></table></div></div>  <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <p style="color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	查找行: </p> <p style="color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> </p><div><div id="highlighter_715871"  cpp"=""><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div></td><td><div><div number1="" index0=""  alt2"=""><code preprocessor"="">#include &lt;endian.h&gt;</code></div></div></td></tr></tbody></table></div></div>  <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp;&nbsp; </div> <p style="color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	临时变更为： </p> <p style="color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> </p><div><div id="highlighter_674497"  cpp"=""><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div></td><td><div><div number1="" index0=""  alt2"=""><code preprocessor"="">#include &lt;machine/endian.h&gt;</code></div></div></td></tr></tbody></table></div></div>  <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp;&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	然后重新编译 player-x&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	make 就足够了&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	make </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	&nbsp; </div> <div style="margin:0px;padding:0px;color:#333333;font-family:'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif;font-size:14px;background-color:#FFFFFF;"> 	**player-x 编译完毕后， 千万要将endian.h 引用改回原来的 #include &lt;endian.h&gt; ， 否则打包到手机的时候又回提示文件找不到了。&nbsp; </div></div><img src ="http://www.cppblog.com/colorful/aggbug/209557.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/colorful/" target="_blank">多彩人生</a> 2015-01-17 16:08 <a href="http://www.cppblog.com/colorful/archive/2015/01/17/209557.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Lua注册回调到C++</title><link>http://www.cppblog.com/colorful/archive/2015/01/17/209553.html</link><dc:creator>多彩人生</dc:creator><author>多彩人生</author><pubDate>Sat, 17 Jan 2015 03:12:00 GMT</pubDate><guid>http://www.cppblog.com/colorful/archive/2015/01/17/209553.html</guid><wfw:comment>http://www.cppblog.com/colorful/comments/209553.html</wfw:comment><comments>http://www.cppblog.com/colorful/archive/2015/01/17/209553.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/colorful/comments/commentRss/209553.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/colorful/services/trackbacks/209553.html</trackback:ping><description><![CDATA[<div>http://cn.cocos2d-x.org/tutorial/show?id=1896</div><br /><div><p><strong>思路</strong></p><p>像所有语言一样，绑定回调主要是执行的任务执行到特定情形的时候，调用对用回调方法。 本文也一样，Lua注册回调到C++的核心思路是，当C代码执行到特定特定情形的时候，调用Lua的方法。</p><p>我这里使用的是用lua_stack直接调用lua的方法，没有使用Cocos2d-x封装的那个dispatcher，因为熟悉那个格式太墨迹了。</p><p><br /></p><p><strong>主要步骤如下</strong></p><ul list-paddingleft-2"="" style="list-style-type: disc;"><li><p>缓存Lua函数在Lua环境中的引用</p></li><li><p>在C代码的地方用C的方式设置好回调</p></li><li><p>在C代码回调函数执行的时候，调用lua函数</p></li></ul><p><br /></p><p><strong>实现</strong></p><ul list-paddingleft-2"="" style="list-style-type: disc;"><li><p>C代码绑定回调，调用Lua函数</p></li></ul><div><div id="highlighter_673942"  cpp"=""><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div><div number2="" index1=""  alt1"="">2</div><div number3="" index2=""  alt2"="">3</div><div number4="" index3=""  alt1"="">4</div><div number5="" index4=""  alt2"="">5</div><div number6="" index5=""  alt1"="">6</div><div number7="" index6=""  alt2"="">7</div><div number8="" index7=""  alt1"="">8</div><div number9="" index8=""  alt2"="">9</div><div number10="" index9=""  alt1"="">10</div><div number11="" index10=""  alt2"="">11</div><div number12="" index11=""  alt1"="">12</div><div number13="" index12=""  alt2"="">13</div><div number14="" index13=""  alt1"="">14</div><div number15="" index14=""  alt2"="">15</div><div number16="" index15=""  alt1"="">16</div><div number17="" index16=""  alt2"="">17</div><div number18="" index17=""  alt1"="">18</div><div number19="" index18=""  alt2"="">19</div><div number20="" index19=""  alt1"="">20</div><div number21="" index20=""  alt2"="">21</div><div number22="" index21=""  alt1"="">22</div><div number23="" index22=""  alt2"="">23</div><div number24="" index23=""  alt1"="">24</div><div number25="" index24=""  alt2"="">25</div><div number26="" index25=""  alt1"="">26</div><div number27="" index26=""  alt2"="">27</div><div number28="" index27=""  alt1"="">28</div><div number29="" index28=""  alt2"="">29</div><div number30="" index29=""  alt1"="">30</div><div number31="" index30=""  alt2"="">31</div><div number32="" index31=""  alt1"="">32</div></td><td><div><div number1="" index0=""  alt2"=""><code keyword=""  bold"="">void</code>&nbsp;<code plain"="">ArmatureNode::registerMovementEventHandler(</code><code color1=""  bold"="">int</code>&nbsp;<code plain"="">handler)</code></div><div number2="" index1=""  alt1"=""><code plain"="">{</code></div><div number3="" index2=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">unregisterMovementEventHandler();&nbsp;&nbsp;</code><code comments"="">//移除之前注册的监听</code></div><div number4="" index3=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">_movementHandler&nbsp;=&nbsp;handler;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code comments"="">//缓存lua函数的引用&nbsp;这个后边说</code></div><div number5="" index4=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number6="" index5=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">auto&nbsp;dispatcher&nbsp;=&nbsp;getCCEventDispatcher();</code></div><div number7="" index6=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number8="" index7=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">auto&nbsp;f&nbsp;=&nbsp;[</code><code keyword=""  bold"="">this</code><code plain"="">](cocos2d::EventCustom&nbsp;*event)&nbsp;</code><code comments"="">//注册c代码形式的回调&nbsp;这里用function做</code></div><div number9="" index8=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">{</code></div><div number10="" index9=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">auto&nbsp;eventData&nbsp;=&nbsp;(dragonBones::EventData*)(event-&gt;getUserData());</code></div><div number11="" index10=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">auto&nbsp;type&nbsp;=&nbsp;(</code><code color1=""  bold"="">int</code><code plain"="">)&nbsp;eventData-&gt;getType();</code></div><div number12="" index11=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">auto&nbsp;movementId&nbsp;=&nbsp;eventData-&gt;animationState-&gt;name;</code></div><div number13="" index12=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">auto&nbsp;lastState&nbsp;=&nbsp;eventData-&gt;armature-&gt;getAnimation()-&gt;getLastAnimationState();</code></div><div number14="" index13=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number15="" index14=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">auto&nbsp;stack&nbsp;=&nbsp;cocos2d::LuaEngine::getInstance()-&gt;getLuaStack();</code></div><div number16="" index15=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">stack-&gt;pushObject(</code><code keyword=""  bold"="">this</code><code plain"="">,&nbsp;</code><code string"="">"db.ArmatureNode"</code><code plain"="">);</code></div><div number17="" index16=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">stack-&gt;pushInt(type);</code></div><div number18="" index17=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">stack-&gt;pushString(movementId.c_str(),&nbsp;movementId.size());&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code></div><div number19="" index18=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code comments"="">//通过LuaStack调用lua里的函数&nbsp;&nbsp;&nbsp;&nbsp;最后一个参数设置参数个数</code></div><div number20="" index19=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">stack-&gt;executeFunctionByHandler(_movementHandler,&nbsp;3);</code></div><div number21="" index20=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">};</code></div><div number22="" index21=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number23="" index22=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">dispatcher-&gt;addCustomEventListener(dragonBones::EventData::COMPLETE,&nbsp;f);</code></div><div number24="" index23=""  alt1"=""><code plain"="">}</code></div><div number25="" index24=""  alt2"=""><code keyword=""  bold"="">void</code>&nbsp;<code plain"="">ArmatureNode::unregisterMovementEventHandler(</code><code keyword=""  bold"="">void</code><code plain"="">)</code></div><div number26="" index25=""  alt1"=""><code plain"="">{</code></div><div number27="" index26=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code keyword=""  bold"="">if</code>&nbsp;<code plain"="">(0&nbsp;!=&nbsp;_movementHandler)</code></div><div number28="" index27=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">{</code></div><div number29="" index28=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">cocos2d::LuaEngine::getInstance()-&gt;removeScriptHandler(_movementHandler);&nbsp;</code><code comments"="">//移除lua函数的绑定</code></div><div number30="" index29=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">_movementHandler&nbsp;=&nbsp;0;</code></div><div number31="" index30=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">}</code></div><div number32="" index31=""  alt1"=""><code plain"="">}</code></div></div></td></tr></tbody></table></div></div><ul list-paddingleft-2"="" style="list-style-type: disc;"><li><p>提供Lua函数绑定到C的方法 &nbsp;&nbsp;</p></li></ul><p>上边的这个函数直接用cocos里的genbinding.py 是无法正确生成Lua里可调用的接口的，需要手动编写绑定方法.</p><p>说这个得用到Cocos2d-x中提供的一个方法：toluafix_ref_function会把一个Lua栈中的方法转成一个int，以便C++中调用。我会在最后面说这个</p><div><div id="highlighter_948637"  cpp"=""><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div><div number2="" index1=""  alt1"="">2</div><div number3="" index2=""  alt2"="">3</div><div number4="" index3=""  alt1"="">4</div><div number5="" index4=""  alt2"="">5</div><div number6="" index5=""  alt1"="">6</div><div number7="" index6=""  alt2"="">7</div><div number8="" index7=""  alt1"="">8</div><div number9="" index8=""  alt2"="">9</div><div number10="" index9=""  alt1"="">10</div><div number11="" index10=""  alt2"="">11</div><div number12="" index11=""  alt1"="">12</div><div number13="" index12=""  alt2"="">13</div><div number14="" index13=""  alt1"="">14</div><div number15="" index14=""  alt2"="">15</div><div number16="" index15=""  alt1"="">16</div><div number17="" index16=""  alt2"="">17</div><div number18="" index17=""  alt1"="">18</div><div number19="" index18=""  alt2"="">19</div><div number20="" index19=""  alt1"="">20</div><div number21="" index20=""  alt2"="">21</div></td><td><div><div number1="" index0=""  alt2"=""><code color1=""  bold"="">int</code>&nbsp;<code plain"="">tolua_db_DBCCArmature_registerMovementEventHandler(lua_State*&nbsp;tolua_S)</code></div><div number2="" index1=""  alt1"=""><code plain"="">{</code></div><div number3="" index2=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code keyword=""  bold"="">if</code>&nbsp;<code plain"="">(NULL&nbsp;==&nbsp;tolua_S)</code></div><div number4="" index3=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code keyword=""  bold"="">return</code>&nbsp;<code plain"="">0;</code></div><div number5="" index4=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code color1=""  bold"="">int</code>&nbsp;<code plain"="">argc&nbsp;=&nbsp;0;</code></div><div number6="" index5=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number7="" index6=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">dragonBones::ArmatureNode*&nbsp;self&nbsp;=&nbsp;nullptr;</code></div><div number8="" index7=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">self&nbsp;=&nbsp;</code><code keyword=""  bold"="">static_cast</code><code plain"="">&lt;dragonBones::ArmatureNode*&gt;(tolua_tousertype(tolua_S,1,0));&nbsp;</code><code comments"="">//第一个参数&nbsp;就是lua里的self</code></div><div number9="" index8=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number10="" index9=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">argc&nbsp;=&nbsp;lua_gettop(tolua_S)&nbsp;-&nbsp;1;</code></div><div number11="" index10=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number12="" index11=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code keyword=""  bold"="">if</code>&nbsp;<code plain"="">(1&nbsp;==&nbsp;argc)</code></div><div number13="" index12=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">{</code></div><div number14="" index13=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code comments"="">//第二个参数，就是Lua里的function&nbsp;这里要通过toluafix_ref_function这个函数映射成一个Int值</code></div><div number15="" index14=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code color1=""  bold"="">int</code>&nbsp;<code plain"="">handler&nbsp;=&nbsp;(toluafix_ref_function(tolua_S,2,0));&nbsp;</code></div><div number16="" index15=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">self-&gt;registerMovementEventHandler(handler);</code></div><div number17="" index16=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number18="" index17=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code keyword=""  bold"="">return</code>&nbsp;<code plain"="">0;</code></div><div number19="" index18=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">}</code></div><div number20="" index19=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code keyword=""  bold"="">return</code>&nbsp;<code plain"="">0;</code></div><div number21="" index20=""  alt2"=""><code plain"="">}</code></div></div></td></tr></tbody></table></div></div><p>&nbsp;</p><ul list-paddingleft-2"="" style="list-style-type: disc;"><li><p>将绑定方法绑定到Lua环境里</p></li></ul><div><div id="highlighter_443360"  cpp"=""><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div><div number2="" index1=""  alt1"="">2</div><div number3="" index2=""  alt2"="">3</div><div number4="" index3=""  alt1"="">4</div><div number5="" index4=""  alt2"="">5</div><div number6="" index5=""  alt1"="">6</div><div number7="" index6=""  alt2"="">7</div><div number8="" index7=""  alt1"="">8</div><div number9="" index8=""  alt2"="">9</div><div number10="" index9=""  alt1"="">10</div><div number11="" index10=""  alt2"="">11</div><div number12="" index11=""  alt1"="">12</div><div number13="" index12=""  alt2"="">13</div><div number14="" index13=""  alt1"="">14</div></td><td><div><div number1="" index0=""  alt2"=""><code color1=""  bold"="">int</code>&nbsp;<code plain"="">extends_ArmatureNode(lua_State*&nbsp;tolua_S)</code></div><div number2="" index1=""  alt1"=""><code plain"="">{</code></div><div number3="" index2=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">lua_pushstring(tolua_S,&nbsp;</code><code string"="">"db.ArmatureNode"</code><code plain"="">);</code><code comments"="">//之前db.ArmatureNode是通过脚本绑定在lua里。这里只做扩展</code></div><div number4="" index3=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">lua_rawget(tolua_S,&nbsp;LUA_REGISTRYINDEX);</code></div><div number5="" index4=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code keyword=""  bold"="">if</code>&nbsp;<code plain"="">(lua_istable(tolua_S,-1))</code></div><div number6="" index5=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">{</code></div><div number7="" index6=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">lua_pushstring(tolua_S,</code><code string"="">"registerMovementEventHandler"</code><code plain"="">);</code></div><div number8="" index7=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">lua_pushcfunction(tolua_S,tolua_db_DBCCArmature_registerMovementEventHandler);</code></div><div number9="" index8=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">lua_rawset(tolua_S,-3);</code></div><div number10="" index9=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">}</code></div><div number11="" index10=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number12="" index11=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">lua_pop(tolua_S,&nbsp;1);</code></div><div number13="" index12=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code keyword=""  bold"="">return</code>&nbsp;<code plain"="">0;</code></div><div number14="" index13=""  alt1"=""><code plain"="">}</code></div></div></td></tr></tbody></table></div></div><ul list-paddingleft-2"="" style="list-style-type: disc;"><li><p>Lua里设置回调到C++</p></li></ul><div><div id="highlighter_72249"  cpp"=""><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div><div number2="" index1=""  alt1"="">2</div><div number3="" index2=""  alt2"="">3</div><div number4="" index3=""  alt1"="">4</div><div number5="" index4=""  alt2"="">5</div><div number6="" index5=""  alt1"="">6</div><div number7="" index6=""  alt2"="">7</div><div number8="" index7=""  alt1"="">8</div></td><td><div><div number1="" index0=""  alt2"=""><code spaces"="">&nbsp;</code><code plain"="">local&nbsp;arm&nbsp;=&nbsp;db.ArmatureNode:create(</code><code string"="">"Dragon"</code><code plain"="">)</code></div><div number2="" index1=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">local&nbsp;animation&nbsp;=&nbsp;arm:getAnimation()</code></div><div number3="" index2=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">animation:gotoAndPlay(</code><code string"="">"walk"</code><code plain"="">)</code></div><div number4="" index3=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">arm:registerMovementEventHandler(</code></div><div number5="" index4=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">function(...)</code></div><div number6="" index5=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">print(...)&nbsp;</code></div><div number7="" index6=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">end</code></div><div number8="" index7=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">)</code></div></div></td></tr></tbody></table></div></div><p><strong><span style="line-height: 1.8;"><br /></span></strong></p><p><strong><span style="line-height: 1.8;">-测试</span></strong></p><p>打印回调输出，测试通过 userdata 8 walk</p><p><br /></p><p><strong>其他</strong></p><ul list-paddingleft-2"="" style="list-style-type: disc;"><li><p>toluafix_ref_function 以及 toluafix_get_function_by_refid</p></li></ul><p>这 两个方法是相互对应的  toluafix_ref_function这个方法在注册表上将一个lua的function与一个function_id生成映射  toluafix_get_function_by_refid 方法可以通过前一个方法生成的function_id来讲绑定的lua  function放到栈顶</p><div><div id="highlighter_757355"  cpp"=""><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div><div number2="" index1=""  alt1"="">2</div><div number3="" index2=""  alt2"="">3</div><div number4="" index3=""  alt1"="">4</div><div number5="" index4=""  alt2"="">5</div><div number6="" index5=""  alt1"="">6</div><div number7="" index6=""  alt2"="">7</div><div number8="" index7=""  alt1"="">8</div><div number9="" index8=""  alt2"="">9</div><div number10="" index9=""  alt1"="">10</div><div number11="" index10=""  alt2"="">11</div><div number12="" index11=""  alt1"="">12</div><div number13="" index12=""  alt2"="">13</div><div number14="" index13=""  alt1"="">14</div><div number15="" index14=""  alt2"="">15</div><div number16="" index15=""  alt1"="">16</div><div number17="" index16=""  alt2"="">17</div><div number18="" index17=""  alt1"="">18</div><div number19="" index18=""  alt2"="">19</div><div number20="" index19=""  alt1"="">20</div><div number21="" index20=""  alt2"="">21</div><div number22="" index21=""  alt1"="">22</div><div number23="" index22=""  alt2"="">23</div></td><td><div><div number1="" index0=""  alt2"=""><code comments"="">//</code></div><div number2="" index1=""  alt1"=""><code plain"="">TOLUA_API&nbsp;</code><code color1=""  bold"="">int</code>&nbsp;<code plain"="">toluafix_ref_function(lua_State*&nbsp;L,&nbsp;</code><code color1=""  bold"="">int</code>&nbsp;<code plain"="">lo,&nbsp;</code><code color1=""  bold"="">int</code>&nbsp;<code plain"="">def)</code></div><div number3="" index2=""  alt2"=""><code plain"="">{</code></div><div number4="" index3=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code keyword=""  bold"="">if</code>&nbsp;<code plain"="">(!lua_isfunction(L,&nbsp;lo))&nbsp;</code><code keyword=""  bold"="">return</code>&nbsp;<code plain"="">0;</code></div><div number5="" index4=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">s_function_ref_id++;&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;&nbsp;</code><code comments"="">//function_id&nbsp;加1</code></div><div number6="" index5=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">lua_pushstring(L,&nbsp;TOLUA_REFID_FUNCTION_MAPPING);</code><code comments"="">//在注册表上，存放luafunction&nbsp;映射table&nbsp;的key压栈</code></div><div number7="" index6=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">lua_rawget(L,&nbsp;LUA_REGISTRYINDEX);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code comments"="">//获取方法映射表，放在栈顶</code></div><div number8="" index7=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">lua_pushinteger(L,&nbsp;s_function_ref_id);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code comments"="">//function_id压栈</code></div><div number9="" index8=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">lua_pushvalue(L,&nbsp;lo);&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;</code><code comments"="">//lo有效处索引处是lua方法，lua方法拷贝，压栈</code></div><div number10="" index9=""  alt1"="">&nbsp;</div><div number11="" index10=""  alt2"="">&nbsp;</div><div number12="" index11=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">lua_rawset(L,&nbsp;-3);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code comments"="">//生成映射&nbsp;</code></div><div number13="" index12=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">lua_pop(L,&nbsp;1);&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code></div><div number14="" index13=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code keyword=""  bold"="">return</code>&nbsp;<code plain"="">s_function_ref_id;</code></div><div number15="" index14=""  alt2"=""><code plain"="">}</code></div><div number16="" index15=""  alt1"=""><code plain"="">TOLUA_API&nbsp;</code><code keyword=""  bold"="">void</code>&nbsp;<code plain"="">toluafix_get_function_by_refid(lua_State*&nbsp;L,&nbsp;</code><code color1=""  bold"="">int</code>&nbsp;<code plain"="">refid)</code></div><div number17="" index16=""  alt2"=""><code plain"="">{</code></div><div number18="" index17=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">lua_pushstring(L,&nbsp;TOLUA_REFID_FUNCTION_MAPPING);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code comments"="">//存放luafunction&nbsp;映射table&nbsp;的key压栈</code></div><div number19="" index18=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">lua_rawget(L,&nbsp;LUA_REGISTRYINDEX);&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;</code><code comments"="">//获取方法映射表，放在栈顶</code></div><div number20="" index19=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">lua_pushinteger(L,&nbsp;refid);&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code comments"="">//function_id压栈</code></div><div number21="" index20=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">lua_rawget(L,&nbsp;-2);&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code comments"="">//获取到的luafunction&nbsp;放到栈顶</code></div><div number22="" index21=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">lua_remove(L,&nbsp;-2);&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code comments"="">//</code></div><div number23="" index22=""  alt2"=""><code plain"="">}</code></div></div></td></tr></tbody></table></div></div><ul list-paddingleft-2"="" style="list-style-type: disc;"><li><p><span style="line-height: 1.8;">executeFunctionByHandler</span></p></li></ul><p>executeFunctionByHandler 这个方法只是通过toluafix_get_function_by_refid 获取到function然后通过lua_pcall 方法调用，代码就不写了。</p></div><img src ="http://www.cppblog.com/colorful/aggbug/209553.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/colorful/" target="_blank">多彩人生</a> 2015-01-17 11:12 <a href="http://www.cppblog.com/colorful/archive/2015/01/17/209553.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>