开源软件名称(OpenSource Name):BuildItNow/BIN_LuaBind开源软件地址(OpenSource Url):https://github.com/BuildItNow/BIN_LuaBind开源编程语言(OpenSource Language):C 76.8%开源软件介绍(OpenSource Introduction):BIN_LuaBindBIN_LuaBind是一个和luabind、tolua++类似的库,提供了简洁的C/C++到lua的绑定机制,但与之不同的是BIN_LuaBind比他们更安全: lua层不在直接依赖于C/C++层指针,避免野指针引起宕机。除此之外,BIN_LuaBind对Lua提供了对lua_state,user data和table的抽象类,在C++端能方便的操作lua。BIN_LuaBind已经在大型的MMORPG游戏中得到应用,实现游戏脚本引擎。 功能
集成1: 下载源码 目录结构
文档Bind机制使用BIN_LuaBind,需要先在C/C++层建立需要导出到脚本的模块或者类定义(注意:不是C++类定义),这个过程通过提供的BEGIN_SCRIPT_MODULE,BEGIN_SCRIPT_CLASS进行定义。然后通过Exporter Manager将需要的模块和类导出到Script Handle或者Script Table里面,这个过程通过ScriptExporterManager().Export和ScriptExporterManager().ExportTo完成。 C++对象和Lua对象关联机制Lua层和C++层的对象采用了中间层进行隔离,因此Lua不会直接依赖C++对象指针,C++也不会直接依赖Lua的Ref,这保证了代码层面的安全性。C++对象销毁后,Lua层不会保留对象野指针;Lua对象回收后,C++层不会调用到未知的对象上去。 Module定义BEGIN_SCRIPT_MODULE : 开始定义一个Module BEGIN_SCRIPT_MODULE(moduleName)
DEFINE_MODULE_FUNCTION(moduleFunction, returnType, (argumentList))
{
return 1;
}
END_SCRIPT_MODULE() Class定义DECLARE_SCRIPT_CLASS : 声明一个C++ Class为Script Class class CClass
{
DECLARE_SCRIPT_CLASS()
public:
CClass()
{
}
~CClass()
{
}
void Func()
{
}
};
BEGIN_SCRIPT_CLASS(className, CClass)
DEFINE_CLASS_FUNCTION(functionName, returnType, (argumentList))
{
return 1;
}
DEFINE_CLASS_FUNCTION(func, void, ())
{
obj->Func();
return 1;
}
DEFINE_STATIC_FUNCTION(newInstance, CClass*, ())
{
r = new CClass();
return 1;
}
END_SCRIPT_CLASS() Class继承定义DECLARE_SCRIPT_SUB_CLASS : 声明一个Class作为Sub Script Class class CSub : public CClass
{
DECLARE_SCRIPT_SUB_CLASS(CClass);
}
BEGIN_SCRIPT_CLASS(subClassName, CSub)
SUPER_CLASS(superClassName, CClass)
DEFINE_CLASS_FUNCTION(func, void, ())
{
return 1;
}
END_SCRIPT_CLASS() C++对象生命期管理对于导出到Lua的C++对象,生命期有两种管理方式:
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论