我得到了 code::blocks 作为我的 C/C++ 编译器以及用于傻瓜C++,但我唯一的问题是我以前从未听说过的晦涩脚本语言;"松鼠"。是否可以将 code::blocks 的脚本语言更改为我更熟悉的语言,例如 lua?
这在理论上似乎是可行的。在实践中是否可行,很难说。以下是您需要执行的操作:
- 创建一个文件夹 src/sdk/scripting/lua,在其中放置 Lua 解释器(+ Lua 库,如 io、math 等)源代码并为其创建项目文件
- 在 src/sdk/scripting/lua_bindings 中创建一个文件夹,在其中放置 Lua 绑定:允许 Lua 脚本访问主机应用程序的C++文件。我建议你使用像SWIG这样的工具来生成它们(代码块使用SqPlus)。这包括确定要导出哪些代码块函数/类,创建一个或多个 .i 文件,在其上运行 SWIG,将生成的文件放入"lua_bindings"中;为绑定创建 DLL 项目
- 创建一个 src/lua_scripts在其中放置 src/scripts 中的脚本的 Lua 等效项;或者更确切地说,这些脚本的一个子集,因为如果您只是按照书中的示例,您不太可能希望将通过 Squirrel 提供的所有内容导出到 Lua
- 查找 Squirrel 解释器在代码块中实例化的位置以及调用 RegisterBindings 的位置;将其替换为 Lua 解释器的实例化,并调用您将通过 SWIG 创建的luaopen_codeblocks(如果您使用 SWIG,则不需要 RegisterLuaBindings,它会为您执行此操作)
-
查找代码块调用各种脚本的位置(请参阅 http://wiki.codeblocks.org/index.php?title=Scripting_Code::Blocks)。调用等效的Lua脚本(这些脚本在lua_scripts - 您肯定必须将其复制到代码块的安装文件夹中)。例如,startup.script是代码块在启动时自动查找的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); }
我认为仅此而已。
当然,根据您的脚本的广泛程度,您可能会偷工减料,但正如您所看到的,这不适合胆小的人!