Я пытаюсь связать Lua в своих приложениях, теперь я пытаюсь проверить, как связывать Lua с C++. Моя проблема очень странная, потому что я хочу вызвать функцию main()
из скрипта в начале, после luaL_loadfile
. Мой код:C++ Функция вызова из сценария Lua
#include <iostream>
#include <cstdlib>
#include <stdio.h>
#include "lua.hpp"
#include "lauxlib.h"
#include "lualib.h"
using namespace std;
int main(int argc, char **argv) {
lua_State* lua = luaL_newstate();
luaL_openlibs(lua);
if (luaL_loadfile(lua, "test.lua") != 0) {
std::cout << lua_tostring(lua, -1) << "\n";
lua_pop(lua, 1);
return 1;
}
lua_getfield(lua, LUA_REGISTRYINDEX, "main");
if (lua_pcall(lua, 0, 1, 0) != 0) {
printf("Error running function 'main': %s\n", lua_tostring(lua, -1));
return 1;
}
lua_close(lua);
return 0;
}
и мой выход:
Ошибка при выполнении функции «основной»: попытка называть нулевой стоимости
То, что вы пытаетесь сделать, абсолютно не имеет смысла. 'main' вызывается библиотекой времени выполнения C/C++ в качестве точки входа в вашу программу. Почему вы хотите снова называть его с помощью сценария lua? – greatwolf
Почему вы просто предположили, что у реестра [Lua] (http://www.lua.org/manual/5.1/manual.html#3.5) есть что-то под ключом «main»? Вы понимаете, что такое время выполнения Lua (и нет)? – remram