Windows 的CALLBACK函数

         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的东西都并不和对象结合在一起,它们是类的一部分,不属于对象。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值