Я попытался получить возвращаемое значение функции C через библиотеку Lua, но не удалось. Мой код выглядит следующим образом:Невозможно получить возвращаемое значение функции C из функции Lua
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
#include <stdio.h>
static int testcmd(lua_State *L)
{
lua_pushnumber(L, 0xBADF00D);
return 1;
}
lua_State *initLua()
{
lua_State *L = luaL_newstate();
lua_gc(L, LUA_GCSTOP, 0);
luaL_openlibs(L);
lua_register(L, "testcmd", testcmd);
lua_gc(L, LUA_GCRESTART, 0);
return L;
}
int main(void)
{
lua_State *L = initLua();
int error = luaL_loadbuffer(L, "testcmd()", 9, "line");
if (error) { printf("Error @ luaL_loadbuffer()\n"); return 0; }
lua_call(L, lua_gettop(L) - 1, LUA_MULTRET);
if (lua_gettop(L) > 0) {
int i;
for (i = 1; i <= lua_gettop(L); ++i) {
printf("%d: %g\n", i, lua_isnumber(L, i) ? lua_tonumber(L, i) : 0.0);
}
} else {
printf("No data in stack\n");
}
lua_close(L);
return 0;
}
Я ожидаю, чтобы получить 1 значение с плавающей точкой, которая составляет около 0xBADF00D
в L
после lua_call()
. Однако фактический результат - No data in stack
.
Как я могу получить значение, толкаемое в стек в testcmd()
?
Вам нужно 'return testcmd()' как ваш кусок, чтобы он возвращал значение вместо того, чтобы просто выбросить его. –
@EtanReisner Я действительно не получаю, где я должен «возвращать testcmd()', чтобы сделать 'L', содержащий значение в верхней части стека. У меня есть 'lua_pushnumber()' 'ed в' testcmd() '. Разве это не правильно? – timrau
Да, это говорит функции C, чтобы вернуть значение, но когда вы * вызываете * функцию из lua, ваш оператор 'testcmd()', который ничего не делает с возвращаемым значением, поэтому он не возвращается из куска , 'return testcmd()' - это строка, которую нужно выполнить для этого. Вы не выполняете прямой вызов 'testcmd' там, где вы выполняете код lua, который * вызывает *' testcmd'. –