gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 15:10:57 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com