LUA & C++:如何在LUA的代码中正确地使用C++函数

我目前正在学习如何在C++代码中使用LUA,但我遇到了一个问题,无法想出如何在LUA的代码中使用C++函数。

我想在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); // 获取函数参数
    write(str); // 调用具有此参数的C++函数...
    return 0; // 没有返回任何内容!
}

int main(){
    lua_State* L = luaL_newstate();
    luaL_openlibs(L); // 加载默认的Lua库

        if (luaL_loadfile(L, "test.lua")) {
            std::cout << "Error loading script" << std::endl;
        }

    lua_pushcfunction(L, l_write);
    lua_setglobal(L, "write"); // 这是函数在Lua中的名称
    lua_pcall(L, 0, 0, 0); // 运行脚本
}

在test.lua中,我有:

write"Hello,world!"write"平方根2是"..math. sqrt2))
x = 42
write"我们也可以使用变量,x = "..x)

问题出现在代码的开头:我甚至无法加载脚本'luaL_loadfile(L,"test.lua")'返回值为7(我检查过NIME_AGAIN 7 / * 暂时的资源已用完 * /)。

除了我不使用自定义C++函数之外,其他所有内容都运作正常。我可以正常从LUA文件加载值,可以执行函数等。

我Suppose LUA在读取文件后已编译它,然后找到不存在的函数名称,即“write”,并在读取此文件的情况下返回错误,这可能吗?如果可以,如何解决此问题,并如何正确地使用此功能?

点赞
用户10452176
用户10452176

Mhm, guys. 这很奇怪,但是我曾经执行了 lua_pop(L, 1),运行了一次,然后将其删除,现在它正常工作了 O.o

2019-03-03 23:06:04