c++ - 如何使用宏动态加载 dll

标签 c++ dll module macros game-engine

抱歉,如果标题令人困惑。不管怎样,我正在用 C++ 开发一个小型游戏引擎,我想将它模块化。我希望有一个核心模块,然后你可以根据你的使用(2D 图形、3D 图形、音频、物理等)安装其他模块,我认为最好的(也许是唯一的)方法是让每个将我的 VS 解决方案中的另一个项目编译为 dll,而核心是一个库。核心库可以通过检查可以在 dll 中定义的宏(如 ENGINE_2D_GRAPHICS_MODULE)来检查安装了哪些模块。我该怎么做,有更好的方法吗?我很确定可能有更好的方法,但我不知道它是什么。

最佳答案

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

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

关于c++ - 如何使用宏动态加载 dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36957436/

相关文章:

c++ - 比较指向不同数组的指针是否相等是未指定的行为吗?

c++ - 使用assimp加载mtl颜色

c++ - 在堆上声明二维 vector

r - 在带有模块(golem)的 Shiny 应用程序中使用 "rintrojs"包时,左上角出现逐步介绍的对话框

python - 通过记事本在windows中执行python(F6 Exec命令__main__错误)

c++ - C中的类型转换

C# 从子文件夹中获取 DLL

c++ - 创建 Dll 文件

C# dotnet web 应用程序 : Dll's xml config file is lost when Publishing

python - 支持Python 2和Python 3的标准方案