加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

windows – 为什么Microsoft选择stdcall作为他们的API约定?

发布时间:2020-12-14 02:47:41 所属栏目:Windows 来源:网络整理
导读:有充分的理由吗? 他们的内部函数(未导出)是否也是stdcall约定? 解决方法 它适用于32位代码的pascal调用约定. Pascal是OS / 2和 Windows 3等16位操作系统的调用约定.为什么选择pascal是一种猜测,即使我当时是一只小小狗,但效率稍高.当您需要使用640 KB时,这
有充分的理由吗?

他们的内部函数(未导出)是否也是stdcall约定?

解决方法

它适用于32位代码的pascal调用约定. Pascal是OS / 2和 Windows 3等16位操作系统的调用约定.为什么选择pascal是一种猜测,即使我当时是一只小小狗,但效率稍高.当您需要使用640 KB时,这一点很重要.

大多数Win32函数都不是真正的stdcall,因为它还规定了导出函数在呈现给链接器之前是如何修饰的.像void Mumble(int arg)变成_Mumble @ 4. @后面的数字描述激活帧大小.但是大多数Win32功能都没有任何装饰.可能会让程序员有机会使GetProcAddress()工作.我认为装饰旨在帮助链接器检测声明的API函数签名与实际签名之间的不匹配.传递的参数数量不匹配是一个自动的kaboom,因为被调用者会从堆栈中弹出更多或更少的参数然后传递.很难诊断. stdcall的弱点,cdecl约定没有这个问题.

内部调用是stdcall,cdecl和thiscall之间的混合包.不能说我曾经检测过一种模式,虽然单步执行的Windows代码并不是我喜欢做的事情.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读