BIN_LuaBind
BIN_LuaBind — это библиотека, похожая на luabind и tolua++, которая предоставляет простой механизм привязки C/C++ к Lua. В отличие от них, BIN_LuaBind более безопасен: слой Lua не зависит напрямую от указателей слоя C/C++, что позволяет избежать сбоя из-за диких указателей. Кроме того, BIN_LuaBind предоставляет абстрактные классы для работы с Lua_state, user data и table в C++. BIN_LuaBind используется в крупных MMORPG играх для реализации игровых скриптовых движков.
Функции:
Интеграция:
Структура каталогов:
Документация
Механизм привязки Для использования BIN_LuaBind необходимо сначала создать модуль или класс определения, который будет экспортирован в скрипт (обратите внимание, что это не определение класса C++), используя BEGIN_SCRIPT_MODULE и BEGIN_SCRIPT_CLASS. Затем с помощью ScriptExporterManager().Export и ScriptExporterManager().ExportTo экспортируйте необходимые модули и классы в Script Handle или Script Table. Таким образом, в слое C++ содержится вся структура определения, и можно экспортировать разные модули и классы в разные Script Handle и Script Table, избегая экспорта всех определений в слой Lua.
Связь между объектами C++ и Lua Объекты слоёв Lua и C++ разделены промежуточным слоем, поэтому Lua не зависит от указателей объектов C++, а C++ не зависит от ссылок Lua. Это обеспечивает безопасность кода. После уничтожения объекта C++ в слое Lua не остаётся диких указателей на него, а после освобождения объекта Lua в слое C++ не вызываются неизвестные объекты.
Определение модуля BEGIN_SCRIPT_MODULE — начало определения модуля; END_SCRIPT_MODULE — завершение определения модуля; DEFINE_MODULE_FUNCTION — определение функции модуля.
BEGIN_SCRIPT_MODULE(moduleName)
DEFINE_MODULE_FUNCTION(moduleFunction, returnType, (argumentList))
{
return 1;
}
END_SCRIPT_MODULE()
Определение класса DECLARE_SCRIPT_CLASS — объявление класса C++ как класса скрипта; BEGIN_SCRIPT_CLASS — начало определения класса скрипта; END_SCRIPT_CLASS — завершение определения класса скрипта; DEFINE_CLASS_FUNCTION — определение метода класса; DEFINE_STATIC_FUNCTION — определение статического метода.
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()
Наследование класса DECLARE_SCRIPT_SUB_CLASS — объявление класса как подкласса скрипта; SUPER_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++ Существует два способа управления жизненным циклом экспортируемых объектов C++:
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )