2

我的问题有点愚蠢,但我决定问一些像你们这样的高级程序员。所以我想制作一个“动态”的 C++ 程序。我的想法是编译它并在编译后(可能使用像 python 这样的脚本语言)来改变程序代码的一些方式。我知道您会告诉我,编译后我无法更改代码,但有办法做到这一点。谢谢!

4

3 回答 3

4

您可以使用外部库中的插件设计模块化架构。例如,您可以使用命令模式。这样您就可以动态加载在主程序之后生成的代码。不过,您必须修复一个界面。Windows api 中的函数GetProcAddress可能是一个很好的起点。

对于动态编码和快速原型设计,我建议看一下Lua。该引擎非常小,易于集成到您的 c++ 程序中。

于 2012-08-24T08:50:12.830 回答
3

在 C++ 中做到这一点的唯一方法是卸载包含要修改的代码的 DLL,修改源代码,调用编译器重新生成 DLL,然后重新加载 DLL。它的重量非常非常重,并且仅当编译器存在于要运行代码的机器上时才有效。(在 Unix 下通常是这种情况,在 Windows 下很少是这种情况。)

像 Python 这样的解释型语言更具动态性;例如,Python 有一个内置函数可以将字符串作为 Python 代码执行。如果您需要可动态修改的代码,我建议您将 Python 嵌入到您的应用程序中,并将其用于动态部分。

于 2012-08-24T08:47:46.517 回答
0

就我个人而言,我从来没有在运行时重新编译 C++,我也不打算这样做。然而,我最近一直在做很多脚本语言的嵌入。

其他人提到了嵌入的明显首选:Lua。Lua 是一种非常流行的嵌入语言,你会发现一堆关于如何做到这一点的文档。将其集成到 C++ 中将允许您在运行时定义您想要的行为。

我使用的是一种很棒的语言,叫做 Squirrel。它很像 Lua,但具有原生对象(类)支持和类似 C++ 的语法。我已经设法将它嵌入到 C++ 应用程序中,并且通过使用 sqrat 绑定库,两种语言都可以轻松共享信息。

我有松鼠构建和初始化我的用户界面。因此,需要 0 编译才能为我的游戏制作和构建我的 UI。我打算更进一步并使用这个游戏方面来创建您正在寻找的类似行为(通过动态代码使用在运行时改变行为)

我建议在这里查看松鼠:http ://www.squirrel-lang.org/

我打算写关于如何嵌入 squirrel 和安装绑定库的教程,但我还没有开始。如果我记得的话,我会在将来(可能是几个月)完成后编辑这篇文章。与此同时,自己试一试。您可能会根据自己的喜好找到它。

于 2012-08-24T13:35:10.930 回答