加入收藏 | 设为首页det365娱乐场所官方网
 365滚球盘进球数技巧
你以前多少米?
发布时间:2019-05-31 点击:
展开全部
两个WINAPI宏和CALLBACK宏有什么区别?
这些关键字是什么意思_stdcall_cdecl_pascal_fastcall?有什么区别?
首先看一下MSDN上给出的描述,但有些没有给出进一步的细节哦Winapi?UseinplaceofFARPASCALinAPIdeclarations。
如果使用导出的PAI入口点创建了DLL,则可以将其用于自己的API。
使用回调路由,窗口过程,对话程序等代替CALLBACK和FARPASCAL。
我们来看看这两个宏的内容。VC:WINDEF。
#defineWINAPICDECL // = _ cdeclBCB:windef h#defineCALLBACKPASCAL // = _ pascal,VC不直接支持_ pascal。
h ### defineCALLBACK__stdcall defineWINAPI__stdcall包含cdeclstdcall,但在极少数情况下可以使用关键字。这意味着最后有一个更改符号,如cdecl,Pascal,stdcall,fastcall等。
非常简单,这是一个堆栈说明。第一个是堆栈中的order参数的函数,然后由谁或您自己调用的人保持堆栈的内容清晰。
这些开关用于指示编译器生成哪个汇编代码。
以下是差异列表:指南参数订单中的参数删除寄存器?
registerLeft-to-rightRoutineYespascalLeft-to-rightRoutineNocdeclRight-to-leftCallerNostdcallRight-to-leftRoutineNosafecallRight-to-left left or right park and / or person service group?/ / / * * * * * * ** * **手动指定。
使用__cdecl约定时,在堆栈中从右到左指定函数参数,并调用函数清理堆栈以炸掉烟囱参数。
因此,实现变量参数的函数只能使用此调用约定。
因为所有使用__cdecl规则的函数都包含清除堆栈的代码,所以生成的可执行文件会很大。
__cdecl可以写成_cdecl。
使用__stdcall调用约定来调用Win32 API函数。
当使用__stdcal约定时,函数参数在堆栈中从右向左调用,并且在返回发送参数堆栈和固定函数参数的数量之前调用函数进行清理。
函数体知道传递的参数的数量,因此被调用的函数可以在返回之前直接清理在retn指令中传递的参数堆栈。
__stdcall可以写成_stdcall。
__ fastcall规则用于非常高性能的情况。
__fastcall规则将函数的两个参数从左侧的ECX和EDX寄存器中放置为4字节或更少的DWORD,并仍然从右向左推送其余参数。在返回清除传输参数堆栈之前,将返回被调用函数。
__fastcall可以写成_fastcall。
特别说明1
默认情况下,使用__cdecl方法,可以省略。
2
WINAPI通常用于更改动态链接库导出功能3。
CALLBACK仅用于修改回调函数4。
您可能已经发现VC和BCB下的WINAPI定义不同,所以至少您了解为什么不能直接从BCB调用VC dll。


上一篇:严重异常零误差战术工具-ZT0350和ZT0200对比     下一篇:没有了