objective-c - 在 Objective C 中调用 C 回调

标签 objective-c c macos libpcap

这是我尝试在 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/

相关文章:

java - 如何从我的网络服务器编辑用户文件系统上的文件?

ios - 如何根据条件设置初始 View Controller ?

iphone - MBProgressHUD 在完成前消失

c - (C) 在for循环下删除整型数组的元素,只有满足条件

c - C 中的 FIFO(命名管道)

c - 使用用户定义的函数检查 malloc 是否成功是一个坏主意吗?

macos - 从源代码构建 Qt 时如何指定 macOS 最低 SDK 版本?

ios - AFNetworking 中的错误响应解析

ios - UIDocumentMenuViewController 更多按钮

macos - 在新的Finder窗口中打开DMG文件