3

我得到了 code::blocks 作为我的 C/C++ 编译器和 C++ 的傻瓜,但我唯一的问题是我以前从未听说过的晦涩的脚本语言;“松鼠”。是否可以将 code::blocks 的脚本语言更改为我更熟悉的语言,例如 lua?

4

1 回答 1

1

理论上似乎可行。在实践中是否可行,很难说。这是您需要做的:

  1. 创建一个文件夹 src/sdk/scripting/lua ,在其中放置 Lua 解释器(+ Lua 库,如 io、math 等)源代码并为其创建项目文件
  2. 在 src/sdk/scripting/lua_bindings 中创建一个文件夹,放置 Lua 绑定:允许 Lua 脚本访问主机应用程序的 C++ 文件。我建议您使用 SWIG 之类的工具来生成它们(代码块使用 SqPlus)。这包括确定要导出的代码块函数/类,创建一个或多个 .i 文件,在它们上运行 SWIG,将生成的文件放入“lua_bindings”;为绑定创建一个 DLL 项目
  3. 创建一个 src/lua_scripts,在其中放置 src/scripts 中的 Lua 等效脚本;或者更确切地说,这些脚本的一个子集,因为如果您只是按照书中的示例进行操作,您不太可能希望将通过 Squirrel 可用的所有内容导出到 Lua
  4. 查找 Squirrel 解释器在代码块中的实例化位置以及 RegisterBindings 的调用位置;用 Lua 解释器的实例化替换它并调用您将通过 SWIG 创建的 luaopen_codeblocks(如果您使用 SWIG,则不需要 RegisterLuaBindings,它会为您执行此操作)
  5. 查找代码块调用各种脚本的位置(参见http://wiki.codeblocks.org/index.php?title=Scripting_Code::Blocks)。调用等效的 Lua 脚本(在 lua_scripts 中——您肯定必须将其复制到代码块的安装文件夹中)。例如,startup.script 是 codeblocks 在启动时自动查找的 Squirrel 脚本,由 src/src/app.cpp 中的以下代码运行:

    // run startup script
    try
    {
        wxString startup = ConfigManager::LocateDataFile(_T("startup.script"), sdScriptsUser | sdScriptsGlobal);
        if (!startup.IsEmpty())
            Manager::Get()->GetScriptingManager()->LoadScript(startup);
    }
    catch (SquirrelError& exception)
    {
        Manager::Get()->GetScriptingManager()->DisplayErrors(&exception);
    }
    

我想就是这样。

当然,根据您的脚本编写范围,您可能会走捷径,但正如您所见,这不适合胆小的人!

于 2013-10-17T21:46:39.493 回答