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

问题描述 投票:1回答:1

我目前正在学习在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); // get function argument
    write(str); // calling C++ function with this argument...
    return 0; // nothing to return!
}

int main(){
    lua_State* L = luaL_newstate();
    luaL_openlibs(L); // load default Lua libs

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

    lua_pushcfunction(L, l_write);
    lua_setglobal(L, "write"); // this is how function will be named in Lua
    lua_pcall(L, 0, 0, 0); // run script
}

在test.lua我有:

write("Hello, world!")
write("The square root of 2 is "..math.sqrt(2))
x = 42
write("We can use variables too, x = "..x)

问题出现在这段代码的最开头:我甚至无法加载脚本luaL_loadfile(L, "test.lua")返回值7(这是我检查NIME_AGAIN 7 / *暂时没有资源* /)。

如果我不使用我的自定义c ++函数,其他所有工作都很好。我可以正常加载LUAs文件中的值,可以执行函数等。

我认为LUA读取文件后已编译它然后找出不存在的函数名称,即“写入”并在读取该文件时返回错误,是否可能?如果是这样,如何解决此问题,以及如何正确使用此功能?

c++ lua
1个回答
0
投票

嗯,伙计们。这很奇怪,但我做了一次lua_pop(L, 1),运行然后删除它,现在它工作得很好O.o

© www.soinside.com 2019 - 2024. All rights reserved.