首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >__stdcall的含义和用法是什么?

__stdcall的含义和用法是什么?
EN

Stack Overflow用户
提问于 2009-08-20 14:03:10
回答 6查看 48.2K关注 0票数 84

这些天我经常遇到__stdcall

MSDN没有很清楚地解释它的真正含义,什么时候和为什么应该使用它,如果有的话。

如果有人能提供一个解释,我将不胜感激,最好是举一两个例子。

EN

回答 6

Stack Overflow用户

发布于 2009-08-20 14:08:53

__stdcall是一种调用约定:确定如何将参数传递给函数(在堆栈上或在寄存器中),以及在函数返回后谁负责清理(调用者或被调用者)。

Raymond Chen写了一个blog about the major x86 calling conventions,也有一个很好的CodeProject article

在大多数情况下,您不应该担心它们。唯一应该这样做的情况是,您调用的库函数使用的不是默认值--否则编译器将生成错误的代码,并且您的程序可能会崩溃。

票数 7
EN

Stack Overflow用户

发布于 2009-08-20 14:08:00

不幸的是,什么时候使用它,什么时候不使用,没有简单的答案。

__stdcall意味着函数的参数从第一个参数到最后一个参数被压入堆栈。这与__cdecl和__fastcall相反,前者意味着参数从最后推送到第一个,后者将前四个(我认为)参数放在寄存器中,其余的放在堆栈中。

你只需要知道被调用者期望什么,或者如果你正在写一个库,你的调用者可能会期望什么,并确保你记录了你选择的约定。

票数 6
EN

Stack Overflow用户

发布于 2009-08-20 14:07:29

它指定了函数的调用约定。调用约定是如何将参数传递给函数的一组规则:按哪个顺序,每个地址或每个副本,谁来清理参数(调用者或被调用者)等。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1306414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档