С++ и Lua регистрируют пользовательскую библиотеку lua во время выполнения

В настоящее время я пытаюсь внедрить LUA в свою программу CPP, однако у меня возникла следующая проблема: у меня есть библиотека на lua, скажем, lib.lua, которую я хотел бы запустить во время выполнения, чтобы другие сценарии lua могли получить к ней доступ. У меня проблемы с этим, вот мой код:

    /* initialize Lua */
    L = luaL_newstate();

    /* load Lua base libraries */
    luaL_openlibs(L);

    /* add my path to package.path */
    luaL_dostring(L, "package.path = 'D://Game.Helper/Lua/libs/?.lua;'..package.path ");        

    /* require my the library */
    luaL_dostring(L, "_G class = require 'middleclass'");
    ^^^ THIS IS CURRENTLY THE CODE NOT WORKING ^^^

    /* load the script */
    luaL_loadfile(L, "d://Game.Helper/Lua/scripts/test.lua");

    lua_call(L, 0, 0);
    
    // clean it up
    lua_close(L);

скрипт загружается правильно, однако, если мне не нужна моя библиотека в самом скрипте, он вернет для нее нулевое значение

Любая помощь приветствуется, спасибо!

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
429
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В Lua, когда вы объявляете переменную как local, она доступна только в этой лексической области видимости. Вы сделали local class = require 'middleclass' в одном файле, а затем попытались использовать class в другом файле, у которого есть своя область действия. Вам нужно либо избавиться от local, чтобы вместо этого class была глобальной переменной, либо переместить эту строку в файл, который будет использовать class.

Понял, спасибо за ответ, я удалил loader.lua и смог отредактировать путь к пакету, используя: luaL_dostring(L, "package.path = 'D://Game.Helper/Lua/libs/?.lua;' ..package.path "); Это позволяет мне идеально использовать мою библиотеку локально в моих сценариях, как бы я ни пытался это сделать: luaL_dostring(L, "_G class = require 'middleclass'"); перед загрузкой моего скрипта, и они не распознают средний класс, если я не объявлю его локально с помощью require , есть ли для этого причина?

CheekyLewb 16.12.2020 08:19

@CheekyLewb Вы имели в виду _G.class вместо _G class?

Joseph Sible-Reinstate Monica 16.12.2020 08:20

Вы гений, спасибо! это исправило мою проблему!

CheekyLewb 16.12.2020 08:26

Другие вопросы по теме