- Регистрация
- 18 Авг 2024
- Сообщения
- 151
- Решения
- 4
- Реакции
- 29
- Баллы
- 28
Взаимодействие Lua с C++ позволяет значительно расширить функциональность скриптового движка, обеспечивая доступ к низкоуровневым API и повышая производительность. Однако работа с Lua C API требует внимательности: стек Lua чувствителен к порядку операций, а механизмы управления памятью имеют свои особенности.
Библиотека будет в формате .dll(Windows) . Писать код мы будем в Visual Studio.
Присупим к написанию кода:
Создадим файл mylib.h - здесь будут храниться функции , которые будут доступны Lua-скриптам .
Далее создадим основной файл , где будет лежать логика для всех наших функций :
Создадим файл bindings.cpp, здесь определяется точка входа для LUA:
Ну и CmakeLists.txt
Ну и создадим тестовый Lua скрипт
Библиотека будет в формате .dll(Windows) . Писать код мы будем в Visual Studio.
Присупим к написанию кода:
Создадим файл mylib.h - здесь будут храниться функции , которые будут доступны Lua-скриптам .
C++:
#ifndef MYLIB_H
#define MYLIB_H
#include <lua.hpp>
// Функция, которую мы экспортируем в Lua
int hello(lua_State *L);
#endif // MYLIB_H
C++:
#include "mylib.h"
int hello(lua_State *L) {
lua_pushstring(L, "Привет из C++!");
return 1;
}
C++:
#include "mylib.h"
extern "C" int luaopen_mylib(lua_State *L) {
luaL_Reg funcs[] = {
{"hello", hello},
{NULL, NULL}
};
luaL_newlib(L, funcs);
return 1;
}
Makefile:
cmake_minimum_required(VERSION 3.10)
project(mylib)
set(CMAKE_CXX_STANDARD 17)
add_library(mylib SHARED mylib.cpp bindings.cpp)
target_include_directories(mylib PRIVATE ЗАМЕНИТЬ/НА/ПУТЬ/ДО/БИБЛИОТЕК/НЕОБХОДИМЫХ/ДЛЯ/РАБОТЫ/С/ЛУА)
target_link_libraries(mylib lua)
CoffeeScript:
local mylib = require("mylib")
print(mylib.hello())