如何将一个objective-c方法传递给c函数作为回调?

时间:2012-11-19 08:11:15

标签: objective-c

我已经阅读了几篇关于这个问题的文章,但没有一篇能解决我的问题。

简单地说,在我的NSApplicationDelegate中,我调用了一个函数pcap_looppcap_loop需要一个函数指针作为回调,回调签名是

void got_packet(u_char *, const struct pcap_pkthdr *, const u_char *)

我想传递一个NSApplicationDelegate的方法作为回调,所以我可以在我的应用程序中使用这些数据,有人建议我使用“SEL + IMP”,但我无法将self传递给回调,也有人建议“阻止”,而不是工作。

那么,任何想法?

谢谢!

1 个答案:

答案 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