gpt4 book ai didi

c - 无法从 Lua 函数获取 C 函数返回值

转载 作者:太空宇宙 更新时间:2023-11-03 23:26:34 26 4
gpt4 key购买 nike

我试图通过Lua库获取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() 之后在 L 中得到大约 0xBADF00D 的 1 个浮点值。然而,实际结果是No data in stack

如何在 testcmd() 中将值压入堆栈?

最佳答案

您已经告诉 C 函数在调用时将值返回给 lua(这就是将值压入堆栈并返回 1 的作用)。

您还没有做的是从您正在运行的 lua block 中返回返回值。

当您从 lua 调用该函数时(使用 luaL_loadbuffer(L, "testcmd()", 9, "line");),您要运行的语句是 testcmd() 不对返回值做任何事情,因此它不会从该 block 返回。

return testcmd() 是您需要运行的代码。

回想一下 luaL_loadbuffer/lua_pcall 对,您并不是在执行 testcmd 的直接调用。相反,您正在执行调用 testcmd 的 lua 代码。

关于c - 无法从 Lua 函数获取 C 函数返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25916191/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com