C++ 调用lua函数问题。
1,通用方法:先加载lua文件然后再执行里面的方法。但是如果lua文件有module即调用模块内的方法则会调用失败。求解决?2,如何加载lua模块而不是文件?3,我的想法...
1,通用方法:先加载lua文件然后再执行里面的方法。但是如果lua文件有module即调用模块内的方法则会调用失败。求解决?
2,如何加载lua模块而不是文件?
3,我的想法:程序运行时,lua虚拟机开启,已经被加载过的lua脚本应该是已经保存在虚拟机里面了,如果后面再次调用应该就不用去加载文件了,而可以直接调用函数。但是这个好像行不通,求解决。 展开
2,如何加载lua模块而不是文件?
3,我的想法:程序运行时,lua虚拟机开启,已经被加载过的lua脚本应该是已经保存在虚拟机里面了,如果后面再次调用应该就不用去加载文件了,而可以直接调用函数。但是这个好像行不通,求解决。 展开
4个回答
展开全部
1、你是不是要对创建出来的虚拟机调用luaL_openlibs一下?
2、啥叫加载lua模块……送一个包含加载模块的lua语句的字符串到虚拟机里面跑一下是不是能解决
3、我也觉得可以直接调用函数啊,详细说一下“行不通”是什么情况。因为我以前写的东西就是加载一次脚本,然后就一直调用里面的函数了,没遇到问题……
2、啥叫加载lua模块……送一个包含加载模块的lua语句的字符串到虚拟机里面跑一下是不是能解决
3、我也觉得可以直接调用函数啊,详细说一下“行不通”是什么情况。因为我以前写的东西就是加载一次脚本,然后就一直调用里面的函数了,没遇到问题……
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不懂你在说什么,为什么调用模块方法会失败,你怎么导入的模块,给点代码比说一堆话都好解释
另外,已经存在的函数,不需要加载什么文件就能一直用,完全不懂你在搞什么
另外,已经存在的函数,不需要加载什么文件就能一直用,完全不懂你在搞什么
追问
问题挺多,麻烦留个QQ沟通下。
追答
有空的时候才来这里回答问题,经常有人问很烦
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
还好 还好
追问
= = 亲你是来打酱油么!
追答
呼呼 混分 飘飘飞过
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
虽然过了很长时间了,但是最近我也在找怎么能解决这个问题。
最后我看到了Lua源码中一个函数是这么写的,应该是可以的。总体上说,就是模块会作为一个Table存放在_G中。所以,先获取这个模块,再在模块中搜索函数,然后就push参数调用。
static int traceback (lua_State *L) {
lua_getfield(L, LUA_GLOBALSINDEX, "debug");
if (!lua_istable(L, -1)) {
lua_pop(L, 1);
return 1;
}
lua_getfield(L, -1, "traceback");
if (!lua_isfunction(L, -1)) {
lua_pop(L, 2);
return 1;
}
lua_pushvalue(L, 1); /* pass error message */
lua_pushinteger(L, 2); /* skip this function and traceback */
lua_call(L, 2, 1); /* call debug.traceback */
return 1;
}
最后我看到了Lua源码中一个函数是这么写的,应该是可以的。总体上说,就是模块会作为一个Table存放在_G中。所以,先获取这个模块,再在模块中搜索函数,然后就push参数调用。
static int traceback (lua_State *L) {
lua_getfield(L, LUA_GLOBALSINDEX, "debug");
if (!lua_istable(L, -1)) {
lua_pop(L, 1);
return 1;
}
lua_getfield(L, -1, "traceback");
if (!lua_isfunction(L, -1)) {
lua_pop(L, 2);
return 1;
}
lua_pushvalue(L, 1); /* pass error message */
lua_pushinteger(L, 2); /* skip this function and traceback */
lua_call(L, 2, 1); /* call debug.traceback */
return 1;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询