在静态库和动态库/插件之间进行选择?

时间:2010-02-12 00:19:06

标签: c++ dll

在过去6个月左右的时间里,我一直在一个小型的测试游戏中把东西放在一起,现在一切都在一个项目中。我想了解更多关于为可重用性创建“引擎”的信息,我想找出最佳方法。

静态Libs显然要快一点,因为它们是在运行时编译而不是在运行时加载,但这对我来说无关紧要。 DLL相对于静态库的优势似乎相当大。所以我想知道什么是最好的方法/最常用的方法是“游戏引擎”。

我正在使用Ogre3D(渲染引擎),它支持它加载的dll插件,什么不支持,但我想写我的dll,我基本上可以在任何地方使用它们。那么我最好的选择是为我的示例引擎的每个部分编写单独的DLL,例如sound.dll,gui.dll等?或者通过创建一个大的dll,视为engine.dll或其他东西,我会更好吗?我假设最好的方法是为一般结构编写像... engine.dll这样的东西,然后组成其他dll,如声音/ gui / input /等。

独立于Ogre的Plugin系统编写我的dll是不是很愚蠢? My Sound依赖于FMOD库,我的GUI依赖于CEGUI库,依此类推。我主要想创建我的引擎,以便可以轻松地使用我需要的各个库中的功能。

1 个答案:

答案 0 :(得分:0)

如果要创建用于可重用性的DLL,则将其拆分为自包含的函数单元是有意义的。因此,如果您有一个普通的声音库,例如,播放wav文件,如果您认为许多其他程序可能会使用该特定库,则可以将其分离为sound.dll。同样,你认为可以在其他地方重复使用的任何东西。

但是,如果大多数情况下只有那些使用你的声音例程的人才会加载其余的游戏引擎(或大部分)dll,那么我认为拥有这么多单独的库是没有意义的。我可以看到使用engine.dll的意义,以便可以从单个引擎创建许多游戏,但不会不必要地分割其余的游戏。