Windows 的CALLBACK函数

来源:互联网 发布:软件开发映射 编辑:程序博客网 时间:2024/05/16 07:56

         WINDOWS的CALLBACK类型定义指定了该函数是进入EXE中的外部入口点,也就是WINDOWS直接调用这个过程.

       一般用户设计而WINDOWS调用的函数都定义为CALLBACK类型.调用时参数以类似Pascal的从右到左的顺序放入程序堆栈中,这种参数调用顺序与C语言的方法刚好相反.使用Pascal堆栈框架意味着由被调用过程而不是由调用者来清理堆栈.

      如WINDOWS的窗口过程函数,应用程序在初始化时向系统注册窗口类(RegisterClass(&wc);)时就把窗口过函数的指针注册到系统中,因此应用程序启动后,WINDOWS系统就能通过该函数指针调用函数.

       还有某些api函数以callback作为其参数之一,这些api,如settimer、linedda、enumobjects.通常这种api会在进行某种行为之后或满足某种状态之时调用该callback函数。另外,如果类的成员函数是一个callback函数,它必须被声明为”static”,才能把c++编译器加诸于函数的一个隐藏参数this去掉。因为callback函数是给windows函数调用的,windows并不借助任何对象调用该函数。如果去掉static的话,就会导致堆栈中有一个随机变量会成为this指针,而结果就是程序的崩溃。记住:凡在类中声明为static的东西都并不和对象结合在一起,它们是类的一部分,不属于对象。

原创粉丝点击