Ответ 1
Краткий ответ: используйте PJSIP API (все это).
Длинный ответ: это зависит.
Если вы программировали приложение для стандартных настольных компьютеров, то есть x86/x64 Windows/Mac/Linux, то нет, это не имеет большого значения, если вы использовали стандартную библиотеку C или обертки, такие как функции PJSIP. Практически, конечно, могут быть функции, которые принимают (как вы указали) структуру pj_str_t
вместо char *
; тогда было бы проще использовать PJSIP API только для упрощения и устранения необходимости конверсий.
Причина для оболочек, я полагаю, заключается в том, чтобы упростить разработку на встроенных устройствах. Я не имею в виду только ARM или другие процессоры, отличные от x86, хотя он может применяться и там; Я имею в виду пользовательские встроенные устройства: вещи, которые имеют очень специфическую цель и изменяются редко. Эти встроенные устройства имеют очень ограниченные возможности и иногда даже не имеют ОС. Без ОС эти процессоры могут не иметь функции malloc
или тому подобного. Часто библиотеки, связанные с устройствами, поскольку они настроены так сильно, не являются полностью "стандартными" и отличаются небольшим образом. Имея обертки для всего, PJSIP может избежать большинства проблем и даже обеспечивать реализацию по всем вещам, например, strcpy
или malloc
, чтобы все устройства запускали "тот же" код.
Упаковщики также предоставляют средства для "крючков". Крючки позволяют лучше отправлять сообщения об ошибках (и, возможно, обрабатывать). Неясно, делает ли это PJSIP (я никогда не использовал PJSIP - я говорю из опыта, используя другие фреймворки), но я указываю, что это просто показать, почему инфраструктура может беспокоить все.
В конце концов, это сводится к вашей цели: если вы решили использовать PJSIP в первую очередь, я бы изо всех сил использовал весь свой API. Если вы используете его только в нескольких местах (по какой-либо причине), то это, вероятно, не имеет значения. Опять же, похоже, что PJSIP нацеливается на встроенные устройства (в нем перечислены системы Nokia и даже RTOS), где довольно распространено предоставление оболочек для "стандартных" функций. Если это так, и вы используете его таким образом, обязательно используйте весь API.