我们正在开发一个中间件SDK,用C ++和Java作为库/ DLL,例如,由游戏开发商,动画软件开发商,Avatar开发人员来增强他们的产品。
我想知道的是:开发这些类型的API是否有标准的“最佳实践”?
我在考虑可用性,可读性,效率等方面。
答案 0 :(得分:6)
答案 1 :(得分:2)
在Windows上使用第三方库我已经学会了以下两点:
尝试将您的库分发为DLL而不是静态库。这使得不同的c编译器和链接器之间的兼容性更好。 Visual c ++中静态库的另一个问题是运行时库的选择会使库与使用不同运行时库的代码不兼容,并且您可能最终需要为每个运行时库分发一个版本的库。
尽可能避免使用c ++。 c ++名称修改在不同编译器之间存在很大差异,并且为Visual c ++构建的库不太可能从Windows中的另一个构建环境进行链接。当谈到C时,事情要好得多,特别是如果你使用dll的话。
如果您真的想要获得c ++的优点(例如通过构造函数和析构函数进行资源管理),请在c ++中构建一个便利层,将其作为隐藏c函数的源代码进行分发。由于用户拥有源并在本地编译它,因此它不会在本地环境中出现任何名称错误或abi问题。
在不太了解从Java调用c / c ++代码的情况下,我希望使用c代码比使用c ++代码更容易,因为名称会出现问题。
“Imperfect C ++”这本书对图书馆的兼容性进行了一些讨论,我觉得这很有帮助。
答案 2 :(得分:1)
yrp提到的来自Josh Bloch的视频是一个经典之作 - 我推荐的第二个视频。
一些一般性指导原则:
答案 3 :(得分:0)
根据您的解决方法,有很多方法可以设计api。我认为这个问题的完整答案对于整本书来说是值得的,例如gang of four patterns book。特别是对于Java,以及一般的OO编程,我建议Effective Java 2nd Edition。第一个是通用和许多流行的编程模式,当它们适用时及其好处。有效的Java是以Java为中心的,但它的一部分足以应用于任何编程语言。
答案 4 :(得分:0)
看看Framework Design Guidelines。我知道它是特定于.NET的,但您也可以从中学到很多一般信息。