这是我尝试在 C 函数回调中使用 Objective C 方法的代码。结果它崩溃了:
typedef void (^BlockCallback)(u_char *args, const struct pcap_pkthdr *header, const u_char *packet);
- (void)startProcessing:(BlockCallback)progressCallback
{
pcap_loop(handle, packetsNumber, (__bridge void *)progressCallback, NULL);// it crashes here
}
....
[self startProcessing:^(u_char *args, const struct pcap_pkthdr *header, const u_char *packet) {
/// some processing code here
}];
最佳答案
我不明白 C 如何能够像这样调用该 block 。不过,只要第一个指针 (user
) 是用户定义的上下文,您就可以使用它来将 self
传递给回调函数,这应该可以工作。 :
static void _pcapCallback(u_char *user, const struct pcap_pkthdr *header, const u_char *packet)
{
MyClass *myClass = (MyClass *)user;
[myClass _pcapHeader:header packet:packet];
}
@implementation MyClass
- (void)_pcapHeader:(const struct pcap_pkthdr *)header
packet:(const u_char *)packet
{
// do thing
}
- (void)startProcessing
{
pcap_loop(handle, packetsNumber, _pcapCallback, self);
}
...
@end
关于objective-c - 在 Objective C 中调用 C 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35919787/