在不执行脚本的情况下调用 Lua 函数。
2010-2-27 3:26:17
收藏:0
阅读:237
评论:3
我正在将Lua嵌入到C/C++应用程序中。有没有一种方法可以在不先执行整个脚本的情况下从C/C++调用Lua函数?
我尝试过这样做:
//从C/C++程序调用lua脚本
luaL_loadfile(L,"hello.lua");
//从C/C++程序调用lua函数
lua_getglobal(L,"bar");
lua_call(L,0,0);
但是它给了我这个:
PANIC: 在调用Lua API时出现未受保护的错误(尝试调用空值)
我只能在这样做时调用bar():
//从C/C++程序调用lua脚本
luaL_dofile(L,"hello.lua"); //这会执行一次脚本,我不喜欢
//从C/C++程序调用lua函数
lua_getglobal(L,"bar");
lua_call(L,0,0);
但是它给了我这个:
hello
stackoverflow!!
我要的是这个:
stackoverflow!
这是我的lua脚本:
print("hello");
function bar()
print("stackoverflow!");
end
原文链接 https://stackoverflow.com/questions/2346060
点赞
stackoverflow用户274904
发现必须运行脚本才能调用该函数。
2010-02-27 03:49:04
stackoverflow用户3688091
一个可能的解决方案/黑科技(请注意我目前无法测试)...
在你的 LUA 代码的顶部插入一个占位符“return;”行。
- 将你的文件加载到一个字符串中(就像你准备使用
luaL_loadstring()
一样) - 现在,使用
printf_s("return;\r\n%s", [指向实际LUA代码的字符串指针])
就可以简单地使用了 - 现在,您可以对连接后的字符串使用
luaL_loadstring()
代码仍然会执行,但应该能够在达到实际执行内容之前被截断(在您的print("hello");
示例中,打印行将变得不可达)。它应该仍然更新了所有函数原型的列表,现在您可以使用lua_get()
来引用这些函数了。
注意:对于那些不知道“\r\n”是代表 Windows 操作系统上换行的转义代码的人,它们必须是那些斜杠... IE:这个 \r\n,而不是这个 /r/n。
2016-06-02 08:35:04
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在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 模式将字符串(嵌套数组)转换为真正的数组?
正如在freenode的#lua频道中刚刚讨论的那样,luaL_loadfile只是将文件编译为可调用的块,在那时,文件内部的任何代码都没有运行(包括函数定义)。因此,为了让bar的定义执行,必须调用该块(这就是luaL_dofile的作用)。