所有能在lua中调用的c/c++函数都必须是遵循lua定义的函数原型:typedef int (*lua_CFunction) (lua_State *L),其中返回值整型int表示,函数返回值个数。lua调用c/c++函数,他们之间的交互依然通过lua栈,而且需要认识到的是,无论是lua调用c函数,还是c/c++调用lua函数,他们之间的交互用的栈并不是全局栈,每个函数都维护着一个自己的私有栈,所有的交互数据均保存在这个私有栈中。
当lua调用c函数时,lua把所有参数都压进函数的私有栈中,并且第一个参数在栈中的位置必定为index=1,第二个参数为index=2,以此类推,的位置。c函数需要从栈中取得参数,在完成相关处理后把处理结果压入私有栈中。返回结果在理论上可以是任意数目,在c函数的最后必须返回代表结果的个数。
测试代码:
lua代码:testGlueLua.lua
myFile = io.open( "io.lua", "w" )
if myFile ~= nil then
myFile:write( "pow: ")
myFile:write( MyPow( 3, 2 ) )
end
io.close( myFile )
c++代码:test.cpp
//测试lua开发库
//1.新建一个lua_state 并初始化环境
//2.加载相关lua程序