gpt4 book ai didi

c++ - LUA 和 C++ : How to properly use C++ function inside LUA's code

转载 作者:太空宇宙 更新时间:2023-11-04 12:39:20 25 4
gpt4 key购买 nike

我目前正在学习在 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 在读取文件后已经编译它然后找出不存在的函数名称,即“write”并在读取该文件的情况下返回错误,这可能吗?如果是这样如何解决这个问题,以及如何正确使用这个功能?

最佳答案

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

关于c++ - LUA 和 C++ : How to properly use C++ function inside LUA's code,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54974616/

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