Lua和C++ 的交互机制的基础在于Lua提供了一个虚拟栈,C++ 和Lua之间的所有类型的数据交换都通过这个栈完成。
C++ 调用 Lua
C++ 可以获取Lua中的值,可以调用Lua函数,还可以修改Lua文件
1)C获取Lua值
- 使用lua_getglocal来获取值,然后将其压栈
- 使用C API lua_toXXX将栈中元素取出转成相应的C类型的值
如果Lua值为table类型的话,通过lua_getfield和lua_setfield获取和修改表中元素的值
2)C调用Lua函数
- 使用lua_getglobal来获取函数,然后将其压入栈;
- 如果这个函数有参数的话,就需要依次将函数的参数也压入栈;
- 这些准备工作都准备就绪以后,就调用lua_pcall开始调用函数了,调用完成以后,会将返回值压入栈中;
- 最后取返回值得过程不用多说了,调用完毕。
Lua 调用 C++
Lua可以调用由C++定义、实现具体的函数
步骤:
1. 将C的函数包装成Lua环境认可的函数
2. 将包装好的函数注册到Lua环境中
3. 像使用普通Lua函数那样使用注册函数
引用:
https://blog.csdn.net/v_xchen_v/article/details/77249332https://blog.csdn.net/zhuzhuyule/article/details/41086745
第三方的软件包
tolua++,luabind,LuaTinker,luaplus