gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 13:28:28 24 4
gpt4 key购买 nike

有充分的理由吗?

它们的内部函数(未导出)是否也是 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 代码。

关于windows - 为什么 Microsoft 选择 stdcall 作为他们的 API 约定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3555678/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com