我目前正在学习在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读取文件后已编译它然后找出不存在的函数名称,即“写入”并在读取该文件时返回错误,是否可能?如果是这样,如何解决此问题,以及如何正确使用此功能?
嗯,伙计们。这很奇怪,但我做了一次lua_pop(L, 1)
,运行然后删除它,现在它工作得很好O.o