typedef int (__stdcall *PFNDLL)(float*,float*,float*,float*);上面的代码是干什么用的,怎样解释!PFNDLL 是个什么东东!!多谢

解决方案 »

  1.   

    int (__stdcall *PFNDLL)(float*,float*,float*,float*);这是声明函数指针的语法,PFNDLL是一个函数指针,指向这样的一个函数:
    int __stdcall Fun(float*,float*,float*,float*);为使用方便,使用typedef把PFNDLL定义成了一个类型.
      

  2.   

    声明了一个函数指针类型:PFNDLL. 函数类型为返回值是int, 参数有4个都是float*,参数入栈方式是stdcall.其中PFNDLL只是一个函数名而已,其实函数可以这样写
    typedef int *PFNDLL(float*,float*,float*,float*);
    我们平时写的都是省略形式,系统自动把__stdcall 添加了,关于__stdcall 的概念,请看下面
    给你看一段
    一:声明回调函数类型。
    typedef int (WINAPI*PFCALLBACK)(intParam1,intParam2); 实际上是声明了一个返回值为int,传入参数为两个int的指向函数的指针。由于C++和PASCAL编译器对参数入栈和函数返回的处理有可能不一致,把函数类型用WINAPI(WINAPI宏展开就是__stdcall)或stdcall统一修饰。C 与C++的两种调用方法
    (1)_stdcall:用于Win32 API函数和COM+接口。它从右向左将参数推入堆栈,被调函数在返回之前从堆栈中弹出自己的参数。从堆栈中弹出自己参数的函数不支持参数数目的变化。
    (2)_cdecl:C和C++默认方式)。它也是从右向左传递参数。但是被调函数不负责从堆栈中弹出参数,调用函数将在函数调用返回后晴空堆栈。
    CALLBACK采用方式(1)。它称为回调函数,即供系统调用的函数。
    例如窗口函数、定时处理函数、线程处理函数等。CALLBACK 是老式叫法,现在微软都改为WINAPI.