主题:PASCAL和CallBack是什么?
lzq123335
[专家分:50] 发布于 2005-09-07 18:17:00
PASCAL和CallBack是什么?
后者是不是用户编写出来,系统自动来调用的?那系统是如何来自动调用呢?
回复列表 (共7个回复)
沙发
cracker007 [专家分:22140] 发布于 2005-09-07 21:31:00
都是函数调用习惯,pascal关系到参数入栈顺序和退栈后的清理工作责任归属,callback一般作为某个api的参数,当满足一定条件时,会自动调用参数中的callback
板凳
hobece [专家分:80] 发布于 2005-09-19 11:39:00
我也不清楚
3 楼
lzq123335 [专家分:50] 发布于 2005-09-21 10:15:00
TO:cracker007
“callback一般作为某个api的参数,当满足一定条件时,会自动调用参数中的callback ”?能不能再详细讲一下。
还有CALLBACK 函数是系统自动调用,那系统怎么知道何时调用,调用哪一个CALLBACK函数呢?(一个程序中如果有多个CALLBACK函数的话)
4 楼
白云小飞 [专家分:260] 发布于 2005-09-21 22:00:00
LRESULT [b]CALLBACK[/b] WinProc(HWND hwnd,
UINT msg,
WPARAM wparam,
LPARAM lparam);
其中的CALLBACK在VC6的Windef.h头文件中是如下定义的:
#define CALLBACK __stdcall
也就是WinProc函数的调用方式是__stdcall方式.
同样,PASCAL 也是如下定义
#define PASCAL __stdcall
所以PASCAL与CALLBACK是相同的.
WinProc函数前加上CALLBACK是为了提供给Windows系列操作系统调用这个函数的.因为Windows系列操作系统调用函数时都要是以__stdcall方式来调用.这种由我们写的并给操作系统调用的函数我们称回调函数。
还有如WINAPI 你也可能在VC6下编程中看到的,它的定义也是如下
#define WINAPI __stdcall
请看windef.h的原文部分如下:
#ifdef _MAC
[b]#define CALLBACK PASCAL[/b]
[b]#define WINAPI CDECL[/b]
#define WINAPIV CDECL
#define APIENTRY WINAPI
#define APIPRIVATE CDECL
#ifdef _68K_
[b]#define PASCAL __pascal[/b]
#else
#define PASCAL
#endif
#elif (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED)
[b]#define CALLBACK __stdcall[/b]
[b]#define WINAPI __stdcall[/b]
#define WINAPIV __cdecl
#define APIENTRY WINAPI
#define APIPRIVATE __stdcall
[b]#define PASCAL __stdcall[/b]
#else
[b]#define CALLBACK[/b]
[b]#define WINAPI[/b]
#define WINAPIV
#define APIENTRY WINAPI
#define APIPRIVATE
[b]#define PASCAL pascal[/b]
#endif
可以知道,在不同编译条件下,CALLBACK,WINAPI,PASCAL 的定义是不同的,所以我开头所说的只是一种情况。
5 楼
万里长城 [专家分:340] 发布于 2007-05-31 20:29:00
Pascal:帕斯卡(Blaise, 1623-1662, 法国数学家、物理学家、哲学家)为了纪念他,瑞士的沃斯教授提出于1971年设立Pascal。
6 楼
万里长城 [专家分:340] 发布于 2007-05-31 20:30:00
CallBack:回收, 回叫信号, 复查
7 楼
hacksy [专家分:0] 发布于 2007-05-31 21:44:00
............
我来回复