⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_28052.htm

📁 vc
💻 HTM
字号:
<p>
序号:28052 发表者:DM 发表日期:2003-01-17 14:24:21
<br>主题:调用约定(__cdecl*,__fastcall,__stdcall)有何不同??
<br>内容:请教各位高手:调用约定(__cdecl*,__fastcall,__stdcall)有何不同?最好能够帮忙举例说明一下。谢谢!谢谢!
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:未出手的飞刀 回复日期:2003-01-17 14:34:53
<br>内容:<BR>在由调用过程还是由被调用过程“恢复现场”上有区别。<BR><BR>void beCalled(int i,int j) //被调用过程<BR>{<BR>}<BR><BR>void caller()&nbsp;&nbsp; //调用过程<BR>{<BR>&nbsp;&nbsp; beCalled(8,9) ;<BR>}<BR><BR>分别把(__cdecl*,__fastcall,__stdcall)加在beCalled上然后看相应的在线汇编代码就知道区别了。<BR><BR>msdn也有详细说明
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:DM 回复日期:2003-01-17 14:47:04
<br>内容:未出手的飞刀:<BR>&nbsp;&nbsp;&nbsp;&nbsp;这个方法我试了好久,还是看不出区别。在线汇编的参数的堆栈压入的次序及现场恢复还是无区别。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:DM 回复日期:2003-01-17 15:03:25
<br>内容:未出手的飞刀:<BR>&nbsp;&nbsp;&nbsp;&nbsp;对不起,我刚才在线汇编时没有仔细看恢复现场是否__stdcall函数被调用后现场会被恢复,而__cdecl,__fastcall不恢复现场。而与参数压入堆栈次序没有关系,你说对吗?<BR><BR>__stdcall<BR>16:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tt(aa,bb,cc);<BR>0040109D&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eax,dword ptr [ebp-0Ch]<BR>004010A0&nbsp;&nbsp; push&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eax<BR>004010A1&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ecx,dword ptr [ebp-8]<BR>004010A4&nbsp;&nbsp; push&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ecx<BR>004010A5&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; edx,dword ptr [ebp-4]<BR>004010A8&nbsp;&nbsp; push&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;edx<BR>004010A9&nbsp;&nbsp; call&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@ILT+10(tt) (0040100f)<BR>004010AE&nbsp;&nbsp; add&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; esp,0Ch&nbsp;&nbsp;恢复现场<BR>17:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 0;<BR><BR>__cdecl,__fastcall<BR>16:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tt(aa,bb,cc);<BR>0040109D&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eax,dword ptr [ebp-0Ch]<BR>004010A0&nbsp;&nbsp; push&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eax<BR>004010A1&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; edx,dword ptr [ebp-8]<BR>004010A4&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ecx,dword ptr [ebp-4]<BR>004010A7&nbsp;&nbsp; call&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@ILT+20(tt) (00401019)<BR>无恢复现场<BR>17:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 0;<BR><BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:未出手的飞刀 回复日期:2003-01-17 16:18:20
<br>内容:<BR>你的分析对了,但观察到的结果和我不一样。<BR>__stdcall 和 __cdecl相反,是你看错了把<BR><BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:dr0 回复日期:2003-01-17 20:57:01
<br>内容:飞刀工作找的咋样了?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:未出手的飞刀 回复日期:2003-01-17 23:51:59
<br>内容:<BR>定了2家,还在找啊,准备年后就上班吧
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -