在学习KAME的IPv6实现过程中,在ICMP6的处理中遇到了相应问题,google了一下,找到了相应的答案。
首先定义了一个函数指针 void (*ctlfunc) (int, struct nps_sockaddr*, void*);
然后将协议转换表中的响应控制输入函数转换为定义的指针的类型
以udp6_ctlinput为例,函数原型为 void udp6_ctlinput(int, struct nps_sockaddr*, void*)
通过下面的赋值
ctlfunc = (void (*) (int, struct nps_sockaddr*, void*)) (udp6_ctlinput);
然后使用指针ctlfunc 调用相关的上层协议处理函数。
附 http://topic.csdn.net/u/20070904/18/90d27a6d-9a2d-41a1-9246-bf5b5662cd62.html
我现在手头有这么一个C文件: (MTK手机平台)
typedef void (*PsExtPeerFuncPtr) (void *, int, void *);
typedef void (*PsFuncPtr) (void *);
PsExtPeerFuncPtr Func1;
PsFuncPtr Func2;
如下转换是否存在问题:
Func1 = (PsExtPeerFuncPtr *)Func2;
(*Func1 ) (a,b, c);
这里略写Func2的实体
Func1函数有3个参数,Func2只有一个参数,那么a、b、c三个参数如何传到Func2中?