const AFX_MSGMAP* (PASCAL* pfnGetBaseMap)()解析

来源:互联网 发布:js和jquery应用 编辑:程序博客网 时间:2024/05/16 15:31


const AFX_MSGMAP* (PASCAL* pfnGetBaseMap)()

函数指针,指针指向一个参数为空返回值类型为CObject*的函数。

PASCAL是函数调用约定,说是参数从右往左压栈方式,函数退出时清空堆栈。


VC里面:PASCAL==CALLBACK==WINAPI==__stdcall
        _stdcall是Pascal程序的缺省调用方式,通常用于Win32  Api中,函数采用从右到左的压栈方式,自己在退出时清空堆栈。VC将函数编译后会在函数名前面加上下划线前缀,在函数名后加上"@"和参数的字节数。
    _cdecl是C和C++程序的缺省调用方式。每一个调用它的函数都包含清空堆栈的代码,所以产生的可执行文件大小会比调用_stdcall函数的大。函数采用从右到左的压栈方式。VC将函数编译后会在函数名前面加上下划线前缀。是MFC缺省调用约定。 

        关于PASCAL,其实你只要弄明白一点就行了:声明为这种调用约定的函数都是由它本身来清栈,而__cdecl的函数都是由调用者来清栈。 
   
  实际用的时候,个人觉得两者最大的差别在于:__cdecl的函数参数个数可以声明为不确定,比如printf,scanf之类,而PASCAL的函数是不可以这样做的,如果这样的话它不知道实参有多少个。

????

0 0