近期一直在查找函数堆栈之类的问题,今天正好有机会和大家共享一下.
想要在C++中用调lua脚本文件中的函数比较简略,因为lua脚本是通过堆栈来和C\C++来停止据数互交的,
所以理原也很简略,只要需先把lua脚本的函数压入到堆栈中
接着再把这个函数所要需的参数也以从左到右的次序压入到堆栈中,
然后就能够执行这个函数了
函数执行后,就会动自删除刚才被我们压入到堆栈中的据数,然后将函数的返回值压入到堆栈
理原就这样,不过就是通过堆栈来停止据数互交
先来看一段小序程:
这段序程将演示如何从lua脚本文件中用调全局量变
void main() { lua_State* pluaState=luaL_newstate(); luaL_openlibs(pluaState); //执行Lua脚本 luaL_dofile(pluaState,"../Script/test.lua"); //将脚本文件中的Pi量变压入堆寨 lua_getglobal(pluaState,"Pi"); cout<<"读取lua脚本的Pi量变:"<<(float)lua_tonumber(pluaState,1)<<endl; lua_pop(pluaState,1); //释放资源 lua_close(pluaState); getchar(); }
---------------------------------------------------------以下是lua脚本文件-------------------------------------------------------------------------------
--就只有一行代码,定义了一个全局量变pi
Pi=3.1415926
面上这段序程加粗部份的地方就是现实这个功能的代码
函数lua_getglobal()是用来将lua脚本文件中的全局量变压入到堆栈中,这个函数有两个参数,第一个参数是lua的状态机(于用存储据数),
第二个参数是你想获得的全局量变的名称标识符..
函数lua_tonumber()是读取堆栈指定位置的据数并且转换为数值型,这个函数的第一个参数是lua的状态机,第二个参数是要读取的据数的位置
最后我们将读取出来的据数接着转换为浮点型据数,通过cout打印到控制台..
最后一个函数lua_pop()无关紧要,但是为了当前便方续继和lua堆栈中的据数停止互交作操,最好还是用调一下这个函数..
这个函数的功能是删除堆栈中指定位置的据数
用调lua脚本中的函数和用调lua脚本文件中的全局量变相似,少至理原一样,但稍有不同
用以下代码替换之前黑体字部份的代码,其余变不
//用调lua脚本中的函数 lua_getglobal(pluaState,"Add"); lua_pushnumber(pluaState,1); lua_pushnumber(pluaState,1); lua_call(pluaState,2,1); cout<<"1+1="<<(int)lua_tonumber(pluaState,1)<<endl; lua_pop(pluaState,1);
-----------------------------------------------------------以下是脚本文件-----------------------------------------------------------
--函数,这个函数分十简略,就是现实加法算运,返回两个数相加的结果
function Add(intX,intY)
return intX+intY;
end-----------------------------------------------------------以下是脚本文件-----------------------------------------------------------
以上这段C++序程:
lua_getglobal(pluaState,"Add");这个函数将lua脚本中的Add()函数压入堆栈中
lua_pushnumber(pluaState,1);这个函数将指定的数值型据数压入到堆栈中
lua_pushnumber(pluaState,1);同上
lua_call(pluaState,2,1);执行刚才被压入堆栈中的函数,这个函数最后两个参数分别是参数的数量和返回值的数量
函数执行后会删除本来被压入到堆栈中的据数,接着会把返回值压入到堆栈
cout<<"1+1="<<(int)lua_tonumber(pluaState,1)<<endl;
lua_pop(pluaState,1);
以上这两段代码就是现将堆栈中的返回值出输,然后将他删除,,便方当前续继和lua堆栈停止据数互交
文章结束给大家分享下程序员的一些笑话语录:
真正的程序员喜欢兼卖爆米花,他们利用CPU散发出的热量做爆米花,可以根据米花爆裂的速度听出正在运行什么程序。