В настоящее время я учусь использовать 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 после чтения файла уже скомпилирует его, а затем узнает имя несуществующей функции, а именно «запись» и возвращает ошибку в случае чтения этого файла, возможно ли это?И если да, то как решить эту проблему и как правильно использовать эту функцию?