【发布时间】:2013-04-01 20:34:35
【问题描述】:
所以几个月前我观看了这段视频,Epic 展示了他们新的虚幻引擎 4 开发者功能。抱歉,我找不到视频,但我会尽力解释。
引起我注意的一个特性是 C++“动态”修改和编译。这家伙在编辑器中展示了他是如何玩游戏的,并修改了代码中的一些变量,保存它,并且这些更改立即反映在游戏中。
所以我一直在想......如何实现这一目标?目前我能想到两种可能的方法:要么是骗局,它只是“c 风格”——脚本语言而不是 C++ 本身,要么是共享库(阅读:DLL)魔法。
这是我自己尝试的东西(简化):
for(;;)
{
Move DLL from build directory to execution directory
Link to DLL using LoadLibrary() / dlopen() and fetch a pointer to function "foo()" from it
for(;;)
{
Call the function "foo()" found in the dll
Check the source of the dll for changes
If it has changed, attempt to compile
On succesfull compile, break
}
Unload DLL with FreeLibrary() / dlclose()
}
现在这似乎可行,但我不禁想知道还有哪些其他方法? 这种方法与使用脚本语言相比如何?
【问题讨论】:
-
你的问题有点含糊。您能否更具体一些,重点关注您要解决的实际问题?
-
这很酷;不知道你能不能用
clang的JIT编译做点什么? -
C: The Complete Reference by Schildt(或者是 C++?)有一个示例项目,它是一个 C(++?) 解释器。也许是这样,或者在软件中包含一个微型但实际的编译器。
-
最近在 isocpp.org 上有一个 similar thing。
-
“这家伙展示了他如何......修改了一些变量......并且这些更改立即反映在游戏中。”您的调试器可以做同样的事情。跨度>
标签: c++ dll compiler-construction runtime shared-libraries