C++ 从 Lua 脚本调用函数
2013-8-22 0:47:4
收藏:0
阅读:88
评论:2
我正在尝试将Lua绑定到我的应用程序中,现在我正在尝试测试如何将Lua绑定到C ++中。我的问题非常奇怪,因为我想要在启动时从脚本调用“main()”函数,之后是“luaL_loadfile”。我的代码:
#include <iostream>
#include <cstdlib>
#include <stdio.h>
#include "lua.hpp"
#include "lauxlib.h"
#include "lualib.h"
using namespace std;
int main(int argc, char **argv) {
lua_State* lua = luaL_newstate();
luaL_openlibs(lua);
if (luaL_loadfile(lua, "test.lua")!= 0) {
std :: cout << lua_tostring(lua,-1) <<“\ n”;
lua_pop(lua,1);
返回1;
}
lua_getfield(lua,LUA_REGISTRYINDEX,"main");
if (lua_pcall(lua,0,1,0)!= 0) {
printf(“运行函数'main'时出错:%s\n”,lua_tostring(lua,-1));
返回1;
}
lua_close(lua);
返回0;
}
我的输出是:
运行函数“main”时出错:尝试调用空值
点赞
用户107090
尝试使用 luaL_dofile 替代 luaL_loadfile。
这是一种最常见的错误:luaL_loadfile 会加载文件但不会运行它,它只会在堆栈中留下一个代表已加载文件的函数,准备好被调用。只有在脚本被运行时(即脚本函数被调用时),函数 main 才会被定义。错误消息正试图告诉您这一点。(我假设您的脚本定义了一个名为 main 的函数。虽然没有真正需要,但这是无害的。)
2013-08-22 00:30:56
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在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 5.2 嵌入 Visual Studio 2005 控制台项目的实例,包括源代码,文章名为《使用 Lua 5.2 对 C++ 应用进行扩展》(Extending a C++ Application with Lua 5.2)。
在 Lua 脚本中调用 main() 并不合理,因为 main() 是应用程序的入口点,需要进行 Lua 初始化等操作,而且这些只需要执行一次。
我提供的示例和文章展示了如何使用 C++ 实现 Lua 5.2,并能够从 Lua 脚本中调用你所创建的 C 函数。该示例还演示了如何从 C++ 程序调用 Lua 函数。
我在大约一年前使用 Visual Studio 2005 完成了这个工作。我认为从 Visual Studio 2005 到 2012 的转换会很简单。但我不确定将其移植到另一个编译器和开发环境中是否会很简单。至少需要将 Visual Studio 2005 中用于 Windows 控制台应用的 _tmain() 函数重命名为 main()。