Добро пожаловать на BlackSAMP - ФОРУМ

  • Приватные и секретные разделы доступны только зарегистрированным пользователям.

    Вся важная информация в нашем ТГ: t.me/gtablack

    На данном форуме запрещено публиковать контент нарушающий Российское законодательство, за это последует блокировка ФА.

Гайд Пишем библиотеку на C++ для Lua

Количество просмотров: 108
Уровень сложности
Сложно

DarkPhantom

C++/Lua developer
Администратор
Регистрация
18 Авг 2024
Сообщения
151
Решения
4
Реакции
29
Баллы
28
Взаимодействие Lua с C++ позволяет значительно расширить функциональность скриптового движка, обеспечивая доступ к низкоуровневым API и повышая производительность. Однако работа с Lua C API требует внимательности: стек 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;
}
Создадим файл bindings.cpp, здесь определяется точка входа для LUA:
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;
}
Ну и CmakeLists.txt
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)
Ну и создадим тестовый Lua скрипт
CoffeeScript:
local mylib = require("mylib")
print(mylib.hello())
 
Сверху Снизу