函数指针

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值