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 内部对该函数指针也指明了这种调用约定,所以你声明的时候也需要指定,才能正确调用。