ObjectiveC поддерживает чистый C, так почему бы просто не создать функцию C on_incoming_call
, которая затем вызывает код ObjectiveC.
Я почти уверен, что это выполнимо напрямую с целью C, но я бы туда не пошел.Проблема начинается с targetC, имеющего дополнительные параметры функции, которые невидимы для вас.Например, параметр self
.
Попробуйте что-то вроде следующего:
void on_incoming_call(pjsua_acc_id acc_id, pjsua_call_id call_id, pjsip_rx_data *rdata) {
[MyObjectiveCObject onIncomingCall...];
}
Теперь вы можете видеть, что у вас может быть небольшая проблема, когда on_incoming_call
находится в статическом состоянии.контекст, в то время как ваш объект может или не может быть.Я обычно создаю синглтоны для таких случаев.Самое простое может выглядеть так:
static MyReceiver *currentReceiver = nil;
+ (MyReceiver *)current {
if(currentReceiver == nil) {
currentReceiver = [[MyReceiver alloc] init];
ua_cfg.cb.on_incoming_call = &on_incoming_call;
}
return currentReceiver;
}
В этом случае вы бы сейчас позвонили
void on_incoming_call(pjsua_acc_id acc_id, pjsua_call_id call_id, pjsip_rx_data *rdata) {
[[MyReceiver current] onIncomingCall...];
}