2012-11-19 4 views
0

이 질문에 대한 기사를 이미 읽었지만 아무도 내 문제를 해결하지 못했습니다.objective-c 메소드를 콜백 함수로 전달하는 방법은 무엇입니까?

간단히, 내 NSApplicationDelegate에, 내가 콜백으로 함수 포인터를 필요로 pcap_loop 기능 pcap_loop라고 불리는 콜백 서명은 그래서, 내가 콜백으로 NSApplicationDelegate의 방법 중 하나를 통과 할

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

입니다 내 애플 리케이션에서 이러한 데이터를 사용할 수있는 누군가가 "SEL + IMP"를 사용하여 나에게 제안하지만, 콜백에 self을 전달할 수 없으며, 누군가 "블록"을 제안했지만 작동하지 않습니다.

그럼, 어떤 생각일까요?

감사합니다.

+0

왜 이것에 Objective-C 방법을 사용해야합니까? C 함수가 필요한 경우 C 함수 (기간)를 전달하십시오. 'self' 포인터가 없으면 다른 것을 할 수 없습니다. –

+0

@ H2CO3 콜백에서 NSApplicationDelegate 인스턴스를 가져와도 될까요? 내 말은, [NSApplicationDelegate sharedInstance] – jiluo

+2

@MartinLuo In Cocoa : [[NSApplication sharedApplication] delegate] 또는 [NSApp delegate]와 같은 것입니다. 그리고 iOS에서 [[UIApplication sharedApplication] delegate] – Emmanuel

답변

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, user에,에 인수로 전달됩니다 got_packet, args 등 원하는대로 설정할 수 있습니다. 이전 답변의 cb_arg/anon 인수에 해당합니다. 이제 앞의 대답을 따라 NSApplicationDelegate 메서드를 호출하는 블록을 user으로 전달하고 C 함수를 사용하여 해당 블록을 callback으로 호출합니다.

+0

잘 찾아 냈습니다. +1. –

+0

감사합니다. 내 문제를 해결했습니다! – jiluo

관련 문제