﻿<?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++博客-Code Knight-随笔分类-跬步千里</title><link>http://www.cppblog.com/winmain/category/12383.html</link><description>Programming is so cool</description><language>zh-cn</language><lastBuildDate>Sun, 07 Mar 2010 13:45:17 GMT</lastBuildDate><pubDate>Sun, 07 Mar 2010 13:45:17 GMT</pubDate><ttl>60</ttl><item><title>[转]__cdecl和__stdcall的区别</title><link>http://www.cppblog.com/winmain/archive/2010/03/07/109128.html</link><dc:creator>Code Knight</dc:creator><author>Code Knight</author><pubDate>Sun, 07 Mar 2010 10:48:00 GMT</pubDate><guid>http://www.cppblog.com/winmain/archive/2010/03/07/109128.html</guid><wfw:comment>http://www.cppblog.com/winmain/comments/109128.html</wfw:comment><comments>http://www.cppblog.com/winmain/archive/2010/03/07/109128.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/winmain/comments/commentRss/109128.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/winmain/services/trackbacks/109128.html</trackback:ping><description><![CDATA[<p>看到的不错的学习文章，转帖过来方便自己学习，无意侵犯作者。只当学习用</p>
<table border=1 cellSpacing=0 cellPadding=0>
    <tbody>
        <tr>
            <td vAlign=top width=290>
            <p align=center>&nbsp; </p>
            <p align=center><strong><span>__cdecl</span> </strong><strong></strong></p>
            <p align=center>&nbsp; <strong></strong></p>
            </td>
            <td vAlign=top width=290>
            <p align=center>&nbsp; </p>
            <p align=center><strong><span>__stdcall</span> </strong><strong></strong><strong></strong></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=290>
            <p align=left>&nbsp; </p>
            <p align=left><span>C</span> <span>和</span> <span>C++</span> <span>程序的缺省调用规范</span> </p>
            </td>
            <td vAlign=top width=290>
            <p align=left>&nbsp; </p>
            <p align=left><span>为了使用这种调用规范，需要你明确的加上</span> <span>__stdcall</span> <span>（或</span> <span>WINAPI</span> <span>）文字。即</span> <em><span>return-type</span> </em><em></em><strong><span>__stdcall</span> </strong><span><em>function-name</em>[(<em>argument-list</em>)]</span> </p>
            <p align=left>&nbsp; </p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=290>
            <p align=left>&nbsp; </p>
            <p align=left><span>在<strong>被</strong>调用函数</span> <span>(Callee)</span> <span>返回<strong>后</strong>，由调用方</span> <span>(Caller)</span> <span>调整堆栈。</span> </p>
            <p align=left>&nbsp;</p>
            <p align=left><span>1. </span><span>调用方的函数调用</span> </p>
            <p align=left><span><span>&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; </span></span></p>
            <p align=left><span>2. </span><span>被调用函数的执行</span> </p>
            <p align=left>&nbsp;</p>
            <p align=left><span>3. </span><span>被调用函数的结果返回</span> </p>
            <p align=left>&nbsp;</p>
            <p align=left><span>4. </span><span>调用方清除调整堆栈</span> </p>
            <p align=left><span><span>&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; </span><span>&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; </span></span></p>
            </td>
            <td vAlign=top width=290>
            <p align=left>&nbsp; </p>
            <p align=left><span>在<strong>被</strong>调用函数</span> <span>(Callee)</span> <span>返回<strong>前</strong>，由<strong>被</strong>调用函数</span> <span>(Callee)</span> <span>调整堆栈。图示：</span> </p>
            <p align=left>&nbsp;</p>
            <p align=left><span>1. </span><span>调用方的函数调用</span> </p>
            <p align=left>&nbsp;</p>
            <p align=left><span>2. </span><span>被调用函数的执行</span> </p>
            <p align=left>&nbsp;</p>
            <p align=left><span>3. </span><span>被调用函数清除调整堆栈</span> </p>
            <p align=left>&nbsp;</p>
            <p align=left><span>4. </span><span>被调用函数的结果返回</span> <span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&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; </span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=290>
            <p align=left>&nbsp; </p>
            <p align=left><span>因为每个调用的地方都需要生成一段调整堆栈的代码，所以最后生成的文件较大。</span> <span></span></p>
            <p align=left>&nbsp; </p>
            </td>
            <td vAlign=top width=290>
            <p align=left>&nbsp; </p>
            <p align=left><span>因为调整堆栈的代码只存在在一个地方（被调用函数的代码内），所以最后生成的文件较小。</span> </p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=290>
            <p align=left>&nbsp; </p>
            <p align=left><span>函数的参数个数可变（就像</span> <span>printf</span> <span>函数一样），因为只有调用者才知道它传给被调用函数几个参数，才能在调用结束时适当地调整堆栈。</span> <span></span></p>
            <p align=left>&nbsp; </p>
            </td>
            <td vAlign=top width=290>
            <p align=left>&nbsp; </p>
            <p align=left><span>函数的参数个数不能是可变的。</span> </p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=290>
            <p align=left>&nbsp; </p>
            <p align=left><span>对于定义在</span> <span>C</span> <span>程序文件中的输出函数，函数名会保持原样，不会被修饰。</span> </p>
            <p align=left><span>对于定义在</span> <span>C++</span> <span>程序文件中的输出函数，函数名会被修饰， </span><span>MSDN</span> <span>说</span> <span>Underscore character (_) is prefixed to names</span> <span>. </span><span>我实际测试（</span> <span>VC4</span> <span>和</span> <span>VC6</span> <span>）下来发现好像不是那么简单。</span> </p>
            <p align=left><strong><span>可通过在前面加上</span> </strong><strong></strong><strong><span>extern </span></strong><strong><span>&#8220;<span>C</span>&#8221;</span> </strong><strong></strong><strong><span>以去除函数名修饰。也可通过</span> </strong><strong></strong><strong><span>.def</span> </strong><strong></strong><strong><span>文件去除函数名修饰。</span> </strong><strong></strong><strong></strong></p>
            </td>
            <td vAlign=top width=290>
            <p align=left>&nbsp; </p>
            <p align=left><span>不论是</span> <span>C</span> <span>程序文件中的输出函数还是</span> <span>C++</span> <span>程序文件中的输出函数，函数名都会被修饰。</span> </p>
            <p align=left><span>对于定义在</span> <span>C</span> <span>程序文件中的输出函数，</span> <span>An underscore (_) is prefixed to the name. The name is followed by the at sign (@) followed by the number of bytes (in decimal) in the argument list.</span> </p>
            <p align=left><span>对于定义在</span> <span>C++</span> <span>程序文件中的输出函数，好像更复杂，和</span> <span>__cdecl</span> <span>的情况类似。</span> </p>
            <p align=left><strong><span>好像只能通过</span> </strong><strong></strong><strong><span>.def</span> </strong><strong></strong><strong><span>文件去除函数名修饰。</span> </strong><strong></strong></p>
            <p align=left>&nbsp; </p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=290>
            <p align=left>&nbsp; </p>
            <p align=left><span>_beginthread</span> <span>需要</span> <span>__cdecl</span> <span>的线程函数地址</span> <span></span></p>
            <p align=left>&nbsp; </p>
            </td>
            <td vAlign=top width=290>
            <p align=left>&nbsp; </p>
            <p align=left><span>_beginthreadex</span> <span>和</span> <span>CreateThread</span> <span>需要</span> <span>__stdcall</span> <span>的线程函数地址</span> <span></span></p>
            <p align=left>&nbsp; </p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=580 colSpan=2>
            <p align=left>&nbsp; </p>
            <p align=left><span>两者的参数传递顺序都是从右向左。</span> </p>
            <p align=left><span>为了让</span> <span>VB</span> <span>可以调用，需要用</span> <span>__stdcall</span> <span>调用规范来定义</span> <span>C/C++</span> <span>函数。请参看<span>Microsoft KB153586 </span>文章：<span><a href="http://support.microsoft.com/default.aspx?scid=kb;en-us;Q153586"><span>How To Call C Functions That Use the _cdecl Calling Convention</span></a></span>。</span> <span></span></p>
            <p align=left><span>当你</span> <span>LoadLibrary</span> <span>一个</span> <span>DLL</span> <span>文件后， 把</span> <span>GetProcAddress</span> <span>取得的函数地址传给上面三个线程生成函数时，请务必确认实际定义在</span> <span>DLL</span> <span>文件的输出函数符合调用规范要求。否则，编译成</span> <span>Release</span> <span>版后运行，可能会破坏堆栈，程序行为不可预测。</span> <span></span></p>
            <p align=left><span>VC</span> <span>中的相关编译开关：<span>/Gd /Gr /Gz</span>。另外，<span>VC6</span>中新增加的<span> /GZ </span>编译开关可以帮你检查堆栈问题。</span> <span></span></p>
            <p align=left><span>我也是初学者，若有不对的地方、可以补充的地方，请指教。谢谢。</span> </p>
            </td>
        </tr>
    </tbody>
</table>
<img src ="http://www.cppblog.com/winmain/aggbug/109128.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/winmain/" target="_blank">Code Knight</a> 2010-03-07 18:48 <a href="http://www.cppblog.com/winmain/archive/2010/03/07/109128.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OGRE小记</title><link>http://www.cppblog.com/winmain/archive/2009/12/28/104319.html</link><dc:creator>Code Knight</dc:creator><author>Code Knight</author><pubDate>Mon, 28 Dec 2009 15:15:00 GMT</pubDate><guid>http://www.cppblog.com/winmain/archive/2009/12/28/104319.html</guid><wfw:comment>http://www.cppblog.com/winmain/comments/104319.html</wfw:comment><comments>http://www.cppblog.com/winmain/archive/2009/12/28/104319.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/winmain/comments/commentRss/104319.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/winmain/services/trackbacks/104319.html</trackback:ping><description><![CDATA[1,entity是没有getPosition的<br>2,node的默认position是原点<br>3,材质脚本中定义的程序段中的source文件名后缀必须与定义的shader文件类型匹配。<br>如：<br>vertex_program Ogre/CelShadingVP1 <span style="color: red;">hlsl</span><br>{<br>&nbsp;&nbsp; &nbsp;source Example_CelShading1.<span style="color: red;">hlsl</span><br>&nbsp;&nbsp; &nbsp;entry_point main_vp<br>&nbsp;&nbsp; &nbsp;<span style="color: red;">target</span> vs_2_0<br>}
<br>注意target是hlsl中独占,cg中是profile,且参数不同<br>4，Plugin_CgProgramManager_d.dll 插件一定要有cg.dll配合<br>5，OGRE不支持的中文路径用下面解决：<br>setlocale(LC_ALL, "chinese-simplified");
<br>记得读取完资源要还原<br>6，&nbsp;&nbsp;&nbsp; Ogre::ResourceGroupManager::getSingleton().initialiseAllResourceGroups()一定要在rendersystem初始化完毕才能调用。也就是在root的createRenderWindow 之后<br>7，想要你的OIS中的mouse何keboard响应你得记得在frameStarted
中每次去capture;<br>记得在&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; <br>mKeyboard = static_cast&lt;OIS::Keyboard*&gt;(mInputManager-&gt;createInputObject(OIS::OISKeyboard, true));<br>mMouse = static_cast&lt;OIS::Mouse*&gt;(mInputManager-&gt;createInputObject(OIS::OISMouse, true));<br>之后<br>mMouse-&gt;setEventCallback(this);<br>mKeyboard-&gt;setEventCallback(this);
<br>
<br><br><br>
<br>      <img src ="http://www.cppblog.com/winmain/aggbug/104319.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/winmain/" target="_blank">Code Knight</a> 2009-12-28 23:15 <a href="http://www.cppblog.com/winmain/archive/2009/12/28/104319.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>复习下最基本的数学知识</title><link>http://www.cppblog.com/winmain/archive/2009/12/08/102819.html</link><dc:creator>Code Knight</dc:creator><author>Code Knight</author><pubDate>Tue, 08 Dec 2009 14:28:00 GMT</pubDate><guid>http://www.cppblog.com/winmain/archive/2009/12/08/102819.html</guid><wfw:comment>http://www.cppblog.com/winmain/comments/102819.html</wfw:comment><comments>http://www.cppblog.com/winmain/archive/2009/12/08/102819.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/winmain/comments/commentRss/102819.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/winmain/services/trackbacks/102819.html</trackback:ping><description><![CDATA[<img alt="" src="http://www.cppblog.com/images/cppblog_com/winmain/dot.jpg"><br>
<img src ="http://www.cppblog.com/winmain/aggbug/102819.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/winmain/" target="_blank">Code Knight</a> 2009-12-08 22:28 <a href="http://www.cppblog.com/winmain/archive/2009/12/08/102819.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>mark.1</title><link>http://www.cppblog.com/winmain/archive/2009/11/24/101847.html</link><dc:creator>Code Knight</dc:creator><author>Code Knight</author><pubDate>Tue, 24 Nov 2009 12:40:00 GMT</pubDate><guid>http://www.cppblog.com/winmain/archive/2009/11/24/101847.html</guid><wfw:comment>http://www.cppblog.com/winmain/comments/101847.html</wfw:comment><comments>http://www.cppblog.com/winmain/archive/2009/11/24/101847.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/winmain/comments/commentRss/101847.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/winmain/services/trackbacks/101847.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 1，UTF-8中FE、FF是不被用到的<br>&nbsp;&nbsp;&nbsp; 2，freetype字模的步进需要乘以64<br><br>  <img src ="http://www.cppblog.com/winmain/aggbug/101847.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/winmain/" target="_blank">Code Knight</a> 2009-11-24 20:40 <a href="http://www.cppblog.com/winmain/archive/2009/11/24/101847.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>