我最近在学lua,并且让lua与C++通信。
利用lua_getglobal可以实现与lua的全局函数的通信,但是如何与lua中table里面的某一个函数通信?例如tableplayer里面有一个getPositio...
利用lua_getglobal可以实现与lua的全局函数的通信,但是如何与lua中table里面的某一个函数通信?例如table player里面有一个getPosition函数,C++里面如何调用这个函数?
展开
2个回答
展开全部
你看手册啊 有个章节 叫做 C api。
假设你的脚本保存在 ./luasrc.lua
#include "lua.hpp"
int main(){
lua_State *L * L=luaL_newstate();
luaL_dofile(L,"./luasrc.lua");//如果调用成功,L 内保存了这个lua脚本的所有变量的状态。
lua_getglobal(L, "player");//将全局变量 player入栈。
lua_getfield(L, -1, "getPosition");//将表格 getPosition 字段入栈。此处值为函数。
/*
将函数参数入栈。根据你的需要自己入栈。
*/
lua_call(L, 3, 1);//假设函数有3个参数,1个返回值。lua会自动把栈底第4个元素作为函数。所以你不能计算错了。
lua_pop(L,3 );//退栈3个元素。
}
假设你的脚本保存在 ./luasrc.lua
#include "lua.hpp"
int main(){
lua_State *L * L=luaL_newstate();
luaL_dofile(L,"./luasrc.lua");//如果调用成功,L 内保存了这个lua脚本的所有变量的状态。
lua_getglobal(L, "player");//将全局变量 player入栈。
lua_getfield(L, -1, "getPosition");//将表格 getPosition 字段入栈。此处值为函数。
/*
将函数参数入栈。根据你的需要自己入栈。
*/
lua_call(L, 3, 1);//假设函数有3个参数,1个返回值。lua会自动把栈底第4个元素作为函数。所以你不能计算错了。
lua_pop(L,3 );//退栈3个元素。
}
追问
测试不通过。在lua_call这里直接退出了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询