LUA & C ++: как правильно использовать функцию C ++ внутри кода LUA - PullRequest
0 голосов
/ 04 марта 2019

В настоящее время я учусь использовать LUA в коде C ++.И я пришел к тому, что не могу понять, как использовать функцию C ++ в коде LUA.

Я хочу создать простую функцию в c ++, а затем использовать ее в LUA.Мой подход заключается в следующем (взято из некоторых учебных пособий):

В main.cpp:

void write(const char* str) {
    std::cout<<str<<std::endl;
}

static int l_write(lua_State* L) {
    const char* str = lua_tostring(L, 1); // get function argument
    write(str); // calling C++ function with this argument...
    return 0; // nothing to return!
}

int main(){
    lua_State* L = luaL_newstate();
    luaL_openlibs(L); // load default Lua libs

        if (luaL_loadfile(L, "test.lua")) {
            std::cout<<"Error loading script"<<std::endl;
        }

    lua_pushcfunction(L, l_write);
    lua_setglobal(L, "write"); // this is how function will be named in Lua
    lua_pcall(L, 0, 0, 0); // run script
}

и в test.lua у меня есть:

write("Hello, world!")
write("The square root of 2 is "..math.sqrt(2))
x = 42
write("We can use variables too, x = "..x)

Проблема возникает в самом начале этого кода: я даже не могу загрузить скрипт luaL_loadfile(L, "test.lua") возвращает значение 7 (как я и проверил NIME_AGAIN 7 / * временно из ресурсов * /).

Все остальноеработает просто отлично, при условии, что я не использую свои пользовательские функции c ++.Я могу нормально загружать значения из файла LUA, могу выполнять функцию ect.

Я полагаю, что LUA после чтения файла уже скомпилирует его, а затем узнает имя несуществующей функции, а именно «запись» и возвращает ошибку в случае чтения этого файла, возможно ли это?И если да, то как решить эту проблему и как правильно использовать эту функцию?

1 Ответ

0 голосов
/ 04 марта 2019

Ммм, ребята.Странно, но я однажды сделал lua_pop(L, 1), запустил, а затем удалил его, и теперь он работает просто отлично Oo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...