普通类成员变量是无法作为 回调函数的,原因就是C++会给类增加一个隐含的参数变量this指针.
这也就是你的类成员函数 ethernet_protocol_packet_callback 出问题的原因.
解决办法:
1.不要用类成员函数来做回调函数.这个估计和你的封装到类中的初衷不符.
2.把ethernet_protocol_packet_callback 加static变成静态函数.不过静态成员函数只能访问静态成员变量,这一点你也要注意一下.如果访问了非静态成员变量,则还会编译失败.
如果一定要访问对象的其他非静态成员变量,可以给类增加一个静态的指针,类型为类本身的类型,并且在类对象的构造函数中初始化它指向类对象,这样就可以访问类对象的所有成员了.
None of the functions with this name in scope match the target type
None of the functions with this name in scope match the target type
class CPacketscapturedDlg :public CDialog
{
public:
CPacketscapturedDlg(CWnd* pParent = NULL);
void ethernet_protocol_packet_callback(u_char *argument,const struct pcap_pkthdr*
packet_header,const u_char *packet_content);
void ip_protocol_packet_callback(u_char *argument,const struct pcap_pkthdr
*packet_header,const u_char* packet_content);
void arp_protocol_packet_callback(u_char *argument,const struct pcap_pkthdr *packet_header,const
u_char * packet_content);
void icmp_protocol_packet_callback(u_char *argument,const struct pcap_pkthdr *
packet_header,const u_char * packet_content);
void udp_protocol_packet_callback(u_char * argument,const struct pcap_pkthdr *
packet_header,const u_char * packet_content);
void tcp_protocol_packet_callback(u_char *argument,const struct pcap_pkthdr *packet_header,const
u_char *packet_content);
void go_capture();
}
void CPacketscapturedDlg::ethernet_protocol_packet_callback(u_char *argument,const struct
pcap_pkthdr* acket_header,const u_char *packet_content){}
void CPacketscapturedDlg::ip_protocol_packet_callback(u_char *argument,const struct
pcap_pkthdr *packet_header,const u_char* packet_content){}
void CPacketscapturedDlg::arp_protocol_packet_callback(u_char *argument,const struct pcap_pkthdr
*packet_header,const u_char * packet_content){}
void CPacketscapturedDlg::icmp_protocol_packet_callback(u_char *argument,const struct pcap_pkthdr * packet_header,const u_char * packet_content){}
void CPacketscapturedDlg::udp_protocol_packet_callback(u_char * argument,const struct pcap_pkthdr * packet_header,const u_char * packet_content){}
void CPacketscapturedDlg::tcp_protocol_packet_callback(u_char *argument,const struct pcap_pkthdr *packet_header,const u_char *packet_content){}
void CPacketscapturedDlg::go_capture()
{
pcap_t *pcap_handle;
u_char *pkt_data;
char error_content[PCAP_ERRBUF_SIZE];
char *net_interface;//网络接口
struct bpf_program bpf_filter;//过滤规则
char bpf_filter_string[]="";
bpf_u_int32 net_mask;//网络掩码
bpf_u_int32 net_ip;//网络地址
net_interface=pcap_lookupdev(error_content);//获得网络接口
pcap_lookupnet(net_interface,&net_ip,&net_mask,error_content);//获得网络地址和网络掩码
pcap_handle=pcap_open_live(net_interface,BUFSIZ,1,0,error_content);//打开网络接口
pcap_compile(pcap_handle,&bpf_filter,bpf_filter_string,0,net_ip);
if(pcap_datalink(pcap_handle)!=DLT_EN10MB)
return;
pcap_loop(pcap_handle,-1,ethernet_protocol_packet_callback,NULL);//回调函数的方式捕获数据包
pcap_close(pcap_handle);
}
void CPacketscapturedDlg::OnCapture()
{
go_capture();
}
编译出现如下的错误:'pcap_loop' :cannot convert parameter 3 from 'void (unsigned char *,const struct pcap_pkthdr *,const unsigned char *)' to 'void (__cdecl *)(unsigned char *,const struct pcap_pkthdr *,const unsigned char *)'
None of the functions with this name in scope match the target type
class CPacketscapturedDlg :public CDialog
{
public:
CPacketscapturedDlg(CWnd* pParent = NULL);
void ethernet_protocol_packet_callback(u_char *argument,const struct pcap_pkthdr*
packet_header,const u_char *packet_content);
void ip_protocol_packet_callback(u_char *argument,const struct pcap_pkthdr
*packet_header,const u_char* packet_content);
void arp_protocol_packet_callback(u_char *argument,const struct pcap_pkthdr *packet_header,const
u_char * packet_content);
void icmp_protocol_packet_callback(u_char *argument,const struct pcap_pkthdr *
packet_header,const u_char * packet_content);
void udp_protocol_packet_callback(u_char * argument,const struct pcap_pkthdr *
packet_header,const u_char * packet_content);
void tcp_protocol_packet_callback(u_char *argument,const struct pcap_pkthdr *packet_header,const
u_char *packet_content);
void go_capture();
}
void CPacketscapturedDlg::ethernet_protocol_packet_callback(u_char *argument,const struct
pcap_pkthdr* acket_header,const u_char *packet_content){}
void CPacketscapturedDlg::ip_protocol_packet_callback(u_char *argument,const struct
pcap_pkthdr *packet_header,const u_char* packet_content){}
void CPacketscapturedDlg::arp_protocol_packet_callback(u_char *argument,const struct pcap_pkthdr
*packet_header,const u_char * packet_content){}
void CPacketscapturedDlg::icmp_protocol_packet_callback(u_char *argument,const struct pcap_pkthdr * packet_header,const u_char * packet_content){}
void CPacketscapturedDlg::udp_protocol_packet_callback(u_char * argument,const struct pcap_pkthdr * packet_header,const u_char * packet_content){}
void CPacketscapturedDlg::tcp_protocol_packet_callback(u_char *argument,const struct pcap_pkthdr *packet_header,const u_char *packet_content){}
void CPacketscapturedDlg::go_capture()
{
pcap_t *pcap_handle;
u_char *pkt_data;
char error_content[PCAP_ERRBUF_SIZE];
char *net_interface;//网络接口
struct bpf_program bpf_filter;//过滤规则
char bpf_filter_string[]="";
bpf_u_int32 net_mask;//网络掩码
bpf_u_int32 net_ip;//网络地址
net_interface=pcap_lookupdev(error_content);//获得网络接口
pcap_lookupnet(net_interface,&net_ip,&net_mask,error_content);//获得网络地址和网络掩码
pcap_handle=pcap_open_live(net_interface,BUFSIZ,1,0,error_content);//打开网络接口
pcap_compile(pcap_handle,&bpf_filter,bpf_filter_string,0,net_ip);
if(pcap_datalink(pcap_handle)!=DLT_EN10MB)
return;
pcap_loop(pcap_handle,-1,ethernet_protocol_packet_callback,NULL);//回调函数的方式捕获数据包
pcap_close(pcap_handle);
}
void CPacketscapturedDlg::OnCapture()
{
go_capture();
}
编译出现如下的错误:'pcap_loop' :cannot convert parameter 3 from 'void (unsigned char *,const struct pcap_pkthdr *,const unsigned char *)' to 'void (__cdecl *)(unsigned char *,const struct pcap_pkthdr *,const unsigned char *)'
None of the functions with this name in scope match the target type
其他人气:200 ℃时间:2020-04-07 14:52:15
优质解答
我来回答
类似推荐
猜你喜欢
- 1东东、爸爸、妈妈三人今年的平均年龄是30岁,已知爸爸和妈妈两人的平均年龄是39岁,你猜东东今年是多少岁?
- 2the summer palace was crowded with people.
- 3化学反应速率.若反应为可逆反应,正反应为吸热反应,逆反应为放放热反应,那么,提高温度,反应速率怎么
- 4求英语作文 老人摔倒
- 5描写人物神情的四字词语2个谢谢
- 6you can cross the road (safe)
- 7苏州园林 第三段分层次的题目
- 8已知EG、FH过正方形ABCD对角线的交点O,求证:EFGH为正方形.
- 9今年初共青团中央发出了“保护母亲河的捐款活动”,某校初一两个班的115名学生积极参加,已知甲班1/3的学生每人捐款10元,乙班2/5的学生每人捐款10元,两班其余学生每人捐5元,设甲班
- 10一块木料长2米,它的横截面是边长0.4米的正方形,这块木料的体积是多少立方米?合多少立方分米