CALLBACK函数是什么意思

markzhao 2001-11-13 05:49:11
...全文
150 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
夭夭 2001-11-14
  • 打赏
  • 举报
回复
CALLBACK __stdcall WINAPI 都是_FAR_ _pascal_ 的
jason802 2001-11-14
  • 打赏
  • 举报
回复
还up什么,怎么不结帐了。

zhuang094 2001-11-14
  • 打赏
  • 举报
回复
upppppp
certbuggy 2001-11-13
  • 打赏
  • 举报
回复
简单讲就是由你定义,由系统调用的函数
baiger 2001-11-13
  • 打赏
  • 举报
回复
markzhao还没有用过SDK编程吧?不知道不奇怪,回去先看看书
boyren 2001-11-13
  • 打赏
  • 举报
回复
jason802(小糊涂仙)讲的精辟
framework 2001-11-13
  • 打赏
  • 举报
回复
是回调函数
jason802 2001-11-13
  • 打赏
  • 举报
回复
CALLBACK函数也称为回掉函数,是由你自己来设计,但是供windows调用的,如果你写过SDK程序,就该知道WindowProc函数,它是你自己写的,什么消息怎么处理,但是,在程序中你并没有去调用这个函数,因为不需要你自己调用,到了该调用的时候windows自然会去调用.如果你的函数不是回掉函数,就不要用CALLBACK或者_cdecl来修饰。
如果你写回掉函数,而且它的参数所占的字节是不可变的,那么就用CALLBACK(大部分是这种情况),如果参数可能会变,那么就用_cdecl 。
markzhao 2001-11-13
  • 打赏
  • 举报
回复
那我什么时候"考虑栈的清楚方式"呢需要把一个函数设计成callback,怎么看MFC的大部分类没有
callback前缀呢?默认的吗?
-----太谢谢小糊涂仙了!
hz1101 2001-11-13
  • 打赏
  • 举报
回复
IUP
jason802 2001-11-13
  • 打赏
  • 举报
回复
"如果你的程序中没有涉及可变参数,最好使用__stdcall关键字"

这个和函数在什么位置是无关的,就是看栈的清除方式,成员函数也可以是CALLBACK的。



markzhao 2001-11-13
  • 打赏
  • 举报
回复
那它和某个MFC类内的成员函数有什么区别,什么时候用callback函数
jason802 2001-11-13
  • 打赏
  • 举报
回复
#define CALLBACK __stdcall
#define WINAPI __stdcall
#define WINAPIV __cdecl
#define APIENTRY WINAPI
#define APIPRIVATE __stdcall
#define PASCAL __stdcall

#define cdecl _cdecl
#ifndef CDECL
#define CDECL _cdecl
#endif
几乎我们写的每一个WINDOWS API函数都是__stdcall类型的,为什么??
首先,我们谈一下两者之间的区别:
WINDOWS的函数调用时需要用到栈(STACK,一种先入后出的存储结构)。当函数调用完成后,栈需要清楚,这里就是问题的关键,如何清除??
如果我们的函数使用了_cdecl,那么栈的清除工作是由调用者,用COM的术语来讲就是客户来完成的。这样带来了一个棘手的问题,不同的编译器产生栈的方式不尽相同,那么调用者能否正常的完成清除工作呢?答案是不能。
如果使用__stdcall,上面的问题就解决了,函数自己解决清除工作。所以,在跨(开发)平台的调用中,我们都使用__stdcall(虽然有时是以WINAPI的样子出现)。
那么为什么还需要_cdecl呢?当我们遇到这样的函数如fprintf()它的参数是可变的,不定长的,被调用者事先无法知道参数的长度,事后的清除工作也无法正常的进行,因此,这种情况我们只能使用_cdecl。
到这里我们有一个结论,如果你的程序中没有涉及可变参数,最好使用__stdcall关键字

codez 2001-11-13
  • 打赏
  • 举报
回复
CALLBACK == WINAPI ==__stdcall

实际上就是一种调用模式,就是约定由调用函数来自行解决压栈参数
同 pascal 调用

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧