2016-04-30 72 views
1

对不起,如果标题混乱。无论如何,我正在使用C++开发一个小型游戏引擎,并且我想对它进行模块化。我想要有一个核心模块,然后你可以根据你的使用(2D图形,3D图形,音频,物理等)来安装其他模块,并且我认为最好的(也许是唯一的)方法是让每个模块为我的VS解决方案中的另一个项目编译为dll而核心是lib。核心库可以通过检查可以在dll中定义的宏如ENGINE_2D_GRAPHICS_MODULE来检查安装了哪些模块。我将如何做到这一点,有没有更好的方法?我很确定有可能是更好的方法,但是它是什么。如何使用宏动态加载dll

回答

2

宏是编译时常量,在安装新模块时不能以这种方式影响核心模块。您可能想要检测文件系统中是否存在其他模块,然后使用LoadLibrary(在Windows上)或dlopen(在符合POSIX的系统上)加载它们。

不同的选择是让游戏开发者(即引擎用户)静态链接你的库,并分别只编译需要的部分。

+0

好的谢谢!我可能会使用cmake让用户选择要编译的部分,thx作为答案。 – PlanetVaster