Lua當(dāng)然也能夠調(diào)用C中定義的函數(shù)。一個(gè)平均數(shù)的例子,解釋一下。
下面給出的C++函數(shù)average()演示了如何接受多個(gè)參數(shù)且返回超過一個(gè)值。
1.lua_gettop函數(shù)返回棧頂?shù)乃饕?。因?yàn)樵贚ua中棧是從1開始編號(hào)的,因此該函數(shù)獲得的值就是參數(shù)的個(gè)數(shù)。
2.在for循環(huán)中計(jì)算所有參數(shù)之和。
3.調(diào)用lua_pushnumber()將參數(shù)的平均值壓棧。
4.最后,函數(shù)返回1,說明有一個(gè)返回值在棧中。
現(xiàn)在C++函數(shù)已經(jīng)被定義好了,我們必須將它告訴Lua解釋器。這將在main函數(shù)中初始化Lua解釋器和載入庫完成之后完成注冊(cè)函數(shù):
復(fù)制代碼 代碼如下:
lua_register(L, "avg", average); //第二參數(shù)為Lua中調(diào)用的函數(shù)名
C++端:
#include "stdafx.h"
#includestdio.h>
extern "C" { //如不用extern會(huì)出現(xiàn)連接錯(cuò)誤,編譯成了C++文件
#include lua.h>
#include lualib.h>
#include lauxlib.h>
}
int average(lua_State *L){
int n= lua_gettop(L);
int i;
double sum=0;
for(i=0;in;i++){
sum+=lua_tonumber(L,-1);
lua_pop(L,1);
}
lua_pushnumber(L,sum/n);
if(!lua_isnumber(L,-1))
luaL_error(L,"push error!\n");
return 1;
}
int _tmain(int argc, _TCHAR* argv[])
{
lua_State* L = lua_open();
luaL_openlibs(L); //新版本庫添加的方法
lua_register(L,"avg",average);
luaL_dofile(L,"cof.lua");
getchar();
return 0;
}
Lua文件:
復(fù)制代碼 代碼如下:
print("avg is ",avg(1,2,3,4,5,6,7,8))
運(yùn)行程序即可實(shí)現(xiàn)求平均數(shù)的功能
您可能感興趣的文章:- Lua和C/C++互相調(diào)用實(shí)例分析
- C++利用LuaIntf調(diào)用Lua的方法示例
- 使用Lua來擴(kuò)展C++程序的方法
- 把Lua函數(shù)傳遞到C/C++中實(shí)例
- Lua和C++語言的交互詳解
- C++與Lua交互原理實(shí)例詳解