Lua當然也能夠調用C中定義的函數。一個平均數的例子,解釋一下。
下面給出的C++函數average()演示了如何接受多個參數且返回超過一個值。
1.lua_gettop函數返回棧頂的索引值。因為在Lua中棧是從1開始編號的,因此該函數獲得的值就是參數的個數。
2.在for循環中計算所有參數之和。
3.調用lua_pushnumber()將參數的平均值壓棧。
4.最后,函數返回1,說明有一個返回值在棧中。
現在C++函數已經被定義好了,我們必須將它告訴Lua解釋器。這將在main函數中初始化Lua解釋器和載入庫完成之后完成注冊函數:
#include "stdafx.h" #include<stdio.h> extern "C" { //如不用extern會出現連接錯誤,編譯成了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;i<n;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文件:
新聞熱點
疑難解答