>

SIP 호출 iOS 애플리케이션을 위해 PJSIP를 사용하고 있습니다. 라이브러리가 C로 작성됨에 따라 Objective C 함수의 주소를 예상하는 일부 콜백 C 메소드 나는 노력했다

ua_cfg.cb.on_incoming_call = &[self on_incoming_call:<#(pjsua_acc_id)#> _:<#(pjsua_call_id)#> _:<#(pjsip_rx_data *)#>]

물론 함수에 매개 변수로 전달할 항목을 모르거나 함수의 주소를 알려주지 않으므로 작동하지 않습니다.

어떻게 작동 시키나요? 이것을 기대하는 C 함수는 다음과 같습니다

void (*on_incoming_call)(pjsua_acc_id acc_id, pjsua_call_id call_id,
                 pjsip_rx_data *rdata);

  • 답변 # 1

    ObjectiveC는 순수한 C를 지원하므로 C 함수 on_incoming_call 를 작성하지 않는 이유  그런 다음 ObjectiveC 코드를 호출합니다.

    객관적 C로 직접 할 수 있다고 확신하지만 거기에 가지는 않을 것입니다. 이 문제는 objectiveC에 보이지 않는 추가 함수 매개 변수가있는 것으로 시작됩니다. 예를 들어 매개 변수 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...];
    }
    
    

  • 이전 amazon cloudformation - CloudFormer를 사용하여 템플릿을 생성하는 방법은 무엇입니까?
  • 다음 in app purchase - Android 구독으로 기능 제한