我已经阅读了几篇关于这个问题的文章,但没有一篇能解决我的问题。
简单地说,在我的NSApplicationDelegate中,我调用了一个函数pcap_loop
,pcap_loop
需要一个函数指针作为回调,回调签名是
void got_packet(u_char *, const struct pcap_pkthdr *, const u_char *)
我想传递一个NSApplicationDelegate的方法作为回调,所以我可以在我的应用程序中使用这些数据,有人建议我使用“SEL + IMP”,但我无法将self
传递给回调,也有人建议“阻止”,而不是工作。
那么,任何想法?
谢谢!
答案 0 :(得分:2)
您需要的精髓可以在this answer中找到。
在您的情况下,您正在致电pcap_loop
:
int pcap_loop(pcap_t *p, int cnt, pcap_handler callback, u_char *user)
其中pcap_handler
是:
void got_packet(u_char *args, const struct pcap_pkthdr *header, const u_char *packet);
现在pcap_loop
的 last 参数user
作为第一个参数传递给got_packet
,{{1并且可以是你想要的任何东西。这与前一个答案中的参数args
/ cb_arg
相对应。现在只需按照上一个答案,将调用anon
方法的块作为NSApplicationDelegate
传递,并将C函数调用为user
。