向 Lua 调用函数推送一些数据。
2012-3-20 8:5:23
收藏:0
阅读:89
评论:1
我有两个文件 - 一个用于执行Lua脚本,另一个是脚本本身。
以下是它们:
host.cpp:
#include <lua.hpp>
#include <iostream>
using namespace std;
int someHandler(lua_State *l)
{
int argc = lua_gettop(l);
for (int i = 0; i < argc; i++)
{
cout << "ARG[" << i + 1 << "] = " << lua_tostring(l, i + 1) << endl;
}
lua_pushstring(l, "m_pi");
//lua_pop(l, argc - 1);
//lua_pushnumber(l, 3.14);
return argc;
}
int main()
{
lua_State *l = lua_open();
luaL_openlibs(l);
lua_register(l, "moo", someHandler);
luaL_dofile(l, "script.lua");
lua_close(l);
return 0;
}
script.lua:
res = moo("hello", "world");
print(moo());
for k, v in res do
print(k.." = "..v);
end
使用 g++ host.cpp -o host.elf -I/usr/include/lua5.1 -llua5.1
编译 host.cpp
。
运行 host.elf
的结果是:
ARG[1] = hello
ARG[2] = world
<\n>
但是它应该是:
ARG[1] = hello
ARG[2] = world
m_pi
我做错了什么?
原文链接 https://stackoverflow.com/questions/9783252
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
--这里向 `moo` 函数传递两个参数 --(暂时忽略赋值运算,稍后会再介绍) res = moo("hello", "world");
控制权转移到 C++ 中:
//l 的栈现在像这样:["hello", "world"] int someHandler(lua_State *l) { int argc = lua_gettop(l); //argc = 2; //该循环输出: //"ARG[1] = hello\n" //"ARG[2] = world\n" for (int i = 0; i < argc; i++) { cout << "ARG[" << i + 1 << "] = " << lua_tostring(l, i + 1) << endl; } //这里将 "m_pi" 推入栈中: lua_pushstring(l, "m_pi"); //此时栈变为 ["hello", "world", "m_pi"] //返回值为 2。 //在 Lua 中,这将被视为一个函数,并返回栈顶的 2 个元素(["world", "m_pi"]) return argc; }
控制权返回到 lua 中:
--将第一个返回值("world")赋值给 res,丢弃其他返回值("m_pi") res = moo("hello", "world"); --调用 `moo` 函数,不传递任何参数。 --此时 `lua_gettop(l)` 将返回 `0`, --所以不会进入 for 循环, --同时返回值的数量将被视为 `0`。 --由 `lua_pushstring(l, "m_pi")` 推入的字符串将被丢弃。 --由于 `moo()` 未返回任何结果,所以 `print` 不会输出任何内容。 print(moo()); --WTF??: res 被赋值为 "world",这是一个字符串, --并不是一个能够进行循环的函数,也不是状态变量或元素变量的求值运算结果。 --当循环尝试调用 `res` 的一个副本(一个字符串)时, --它会引发错误 for k, v in res do print(k.." = "..v); end