运行时的 C++ 编译

标签 c++ dll compiler-construction runtime shared-libraries

因此,我在几个月前观看了这段视频,其中 Epic 展示了他们新的虚幻引擎 4 开发人员功能。抱歉,我找不到视频,但我会尽力解释。

引起我注意的一个特性是 C++“即时”修改和编译。这家伙展示了他是如何在编辑器中玩游戏的,并修改了代码中的一些变量,保存它,所做的更改立即反射(reflect)在游戏中。

所以我一直在想...如何实现这一目标?目前我可以想到两种可能的方法:要么是骗局,要么是“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()
}

现在这似乎行得通,但我不禁想知道还有哪些其他方法? 这种方法与使用脚本语言相比如何?

编辑: https://www.youtube.com/watch?v=MOvfn1p92_8&t=10m0s

最佳答案

是的,“热代码修改”绝对是许多 IDE/调试器在某种程度上可以拥有的一种能力。这是一篇好文章:

这是 MSVS“编辑并继续”的手册页:

关于运行时的 C++ 编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15751377/

相关文章:

c++ - vptr的解析

c++ - Windows 10 不为发布可执行文件加载 DLL

c - 在 VB.NET 项目中添加 DLL 的更好方法

c++ - 将值从 flex 传递给 bison

debugging - 调试器中的断点如何工作?

c++ - 有没有办法强制 Protocol Buffer 使用恒定的字段大小?

c++ - 多线程无法按预期工作

c++ - _iterator_debug_level 值 '0' 与值 '2' 不匹配

c++ - 避免警告 'Unreferenced Formal Parameter'

c++ - 创建插件界面