루아 라이브러리를 통해 C 함수의 반환 값을 얻으려고했지만 실패했습니다. 다음과 같이 내 코드는 다음과 같습니다루아 함수에서 C 함수 반환 값을 얻을 수 없습니다.
#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;
}
내가 lua_call()
후 약 0xBADF00D
L
에서를 1 개 부동 소수점 값을 얻을 것으로 기대합니다. 그러나 실제 결과는 No data in stack
입니다.
testcmd()
에 스택으로 푸시 된 값을 어떻게 얻을 수 있습니까?
청크에'return testcmd()'가 있어야 값을 버리는 것이 아니라 값을 반환 할 수 있습니다. –
@EtanReisner 스택 상단의 값을 포함하는'L '을 만들기 위해'testcmd()'를 돌려줘야 할 곳이 정말로 없습니다. 나는'testcmd()'에''lua_pushnumber()''를 가지고 있습니다. 맞지 않아? – timrau
예, C 함수가 값을 반환하도록 알려주지 만, 루아로부터 함수를 호출 할 때 반환 값에 아무 것도하지 않는'testcmd()'가 있으므로 청크에서 반환되지 않습니다 . 'return testcmd()'는 실행하기 위해 실행해야하는 문자열입니다. 'testcmd'의 직접 호출을 실행하지 않고 *'testcmd'를 호출하는 코드를 실행하고 있습니다. –