函数指针

来源:互联网 发布:组策略映射网络驱动器 编辑:程序博客网 时间:2024/06/07 08:18

typedef DWORD (CALLBACK* LPREGISTERSERVICEPROCESS)(DWORD,DWORD);

定义了一个函数指针类型为 LPREGISTERSERVICEPROCESS,函数返回值为 DWORD,参数为两个 DWORD 类型。函数指针说起来比较麻烦,以带两个 int 参数的函数指针为例,一看就明白:#include <stdio.h>typedef int (*PFNTEST)(int, int);int test1(int a, int b){return (a+b);}int test2(int a, int b){return (a-b);}int call(int i, PFNTEST pfn){return (*pfn)(i*i, i);}int main(){int m, n, p, q;PFNTEST pfnTest;pfnTest = &test1;m = (*pfnTest)(3, 5);pfnTest = &test2;n = (*pfnTest)(6, 2);p = call(4, test1);q = call(7, test2);printf("%d, %d, %d, %d.", m, n, p, q);return 0;}输出结果:8, 4, 20, 42.Windows SDK 定义:#define CALLBACK __stdcall其中采用 __stdcall 调用约定,可能是微软在 dll 内部对该函数指针也指明了这种调用约定,所以你声明的时候也需要指定,才能正确调用。
0 0