回 帖 发 新 帖 刷新版面

主题:PASCAL和CallBack是什么?

PASCAL和CallBack是什么?
后者是不是用户编写出来,系统自动来调用的?那系统是如何来自动调用呢?

回复列表 (共7个回复)

沙发

都是函数调用习惯,pascal关系到参数入栈顺序和退栈后的清理工作责任归属,callback一般作为某个api的参数,当满足一定条件时,会自动调用参数中的callback

板凳

我也不清楚

3 楼

TO:cracker007

“callback一般作为某个api的参数,当满足一定条件时,会自动调用参数中的callback ”?能不能再详细讲一下。
还有CALLBACK 函数是系统自动调用,那系统怎么知道何时调用,调用哪一个CALLBACK函数呢?(一个程序中如果有多个CALLBACK函数的话)

4 楼

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 楼

Pascal:帕斯卡(Blaise, 1623-1662, 法国数学家、物理学家、哲学家)为了纪念他,瑞士的沃斯教授提出于1971年设立Pascal。

6 楼

CallBack:回收, 回叫信号, 复查

7 楼

............

我来回复

您尚未登录,请登录后再回复。点此登录或注册