使用特定于SDK的API或标准c函数

使用特定于SDK的API或标准c函数,c,pjsip,C,Pjsip,你好, 我正在开发一个将使用PJSIPAPI的应用程序 只要看看API文档,我就会看到一些函数似乎只是标准C库的包装。i、 e.pj_memset,pj_strncpy,pj_strlen,等等 我可以看到一些值得考虑的替代方法,它们总是以null结尾字符串。另一个优点是pjsip使用pj_stru_t结构来存储字符串和大小。这可能比使用普通的C字符串要好 使用pj\u size\u t而不是size\u t这样的便携设备有什么意义吗 此处有供快速参考的链接: gcc (GCC) 4.7.2 P

你好,

我正在开发一个将使用PJSIPAPI的应用程序

只要看看API文档,我就会看到一些函数似乎只是标准C库的包装。i、 e.
pj_memset
pj_strncpy
pj_strlen
,等等

我可以看到一些值得考虑的替代方法,它们总是以null结尾字符串。另一个优点是pjsip使用
pj_stru_t
结构来存储字符串和大小。这可能比使用普通的C字符串要好

使用
pj\u size\u t
而不是
size\u t
这样的便携设备有什么意义吗

此处有供快速参考的链接:

gcc (GCC) 4.7.2
PJ SIP 2.1
与标准C库相比,使用PJSIP有什么真正的优势吗


非常感谢您的建议,

简短回答:使用PJSIPAPI(全部)

详细回答:这要看情况

如果您是为标准台式机(即x86/x64 Windows/Mac/Linux)编写应用程序,那么不,如果您使用标准C库或包装器(如PJSIP函数),这其实并不重要。实际上,当然,可能有函数(正如您所指出的)采用
pj_str_t
结构而不是
char*
;使用PJSIPAPI只是为了简化和消除转换的需要会更容易

我认为,使用包装器的原因是为了更容易在嵌入式设备上开发。我指的不仅仅是ARM或其他非x86处理器,尽管它也可以在那里应用;我指的是定制嵌入式设备:具有特定用途且很少改变的设备。这些嵌入式设备的功能非常有限,有时甚至缺少操作系统。如果没有操作系统,这些处理器可能没有
malloc
功能或类似功能。通常情况下,与设备相关联的库(因为它们是定制的)并不完全是“标准”的,并且在一些小的方面有所不同。通过为所有内容提供包装器,PJSIP可以避免大多数问题,甚至可以为诸如
strcpy
malloc
之类的内容提供全面的实现,以便所有设备都运行“相同”的代码

包装器还提供了“钩子”的方法。钩子可以实现更好的错误消息传递(以及可能的处理)。PJSIP是否在这样做还不清楚(我从来没有使用过PJSIP——我是根据使用其他框架的经验讲的),但我指出这一点只是为了说明为什么一个框架可能需要包装所有东西


最后,它归结为您的目的:如果您首先选择使用PJSIP,那么我将全力以赴使用它的所有API。如果你只是在少数地方使用它(无论出于什么原因),那么它可能并不重要。同样,PJSIP的目标似乎是嵌入式设备(它列出了诺基亚甚至RTOS系统),在这些设备中,甚至为“标准”功能提供包装也是相当常见的。如果是这种情况,并且您以这种方式使用它,那么一定要使用整个API。

您会坚持使用pjsip吗

PJSIP源代码(“软件”)在通用和 公共许可证(GPL)版本2或更高版本,以及 可以安排

如果您认为GPL对于未来的扩展可能限制太多(例如Android的用户空间无GPL策略),并且他们的专有许可证是不可接受的,那么您可以使用自己的可移植代码/包装器,您可以使用限制较少的BSD stlye库,如

在标准C库不支持的情况下,还有许多其他方法可以提供所需的功能,其中许多方法将得到更好的测试(我不想提及自动工具,但……它确实支持大多数平台——有些人可能会说太多),或者您可以包括来自


另一个要考虑的是,C API是基于标准的,并且在石头中被公平地设置,而在给定的项目中包装器更自由地打破API兼容从版本到版本(只要问一个GLYB/GTK程序员)

一旦我们从PJSIP创建了一个演示应用程序。是的,我的公司将从他们那里购买一份经营许可证。回答得很好。我只想补充一点,它还可以使库在不破坏代码的情况下更容易地更改其内部结构。如果他们决定
size\u t
不够大,他们可以制作
pj\u size\u t
。如果你在他们期望的地方使用
pj\u size\u t
,这会破坏你的代码。这是一个很好的观点。虽然名称可能表示类似的意图,但它们不一定表示相同或类似的实现。。。他们可以使他们的
pj_大小\u t
更大。
http://www.pjsip.org/pjlib/docs/html/group__PJ__PSTR.htm