20070709 LUA 调用 C 函数 多个返回值 1
http://www.yippeesoft.com
static int average(lua_State *L)
&leftsign;
/* get number of arguments */
int n = lua_gettop(L);
double sum = 0;
int i;
/* loop through each argument */
for (i = 1; i <= n; i++)
&leftsign;
/* total the arguments */
sum += lua_tonumber(L, i);
&rightsign;
/* push the average */
lua_pushnumber(L, sum / n);
/* push the sum */
lua_pushnumber(L, sum);
/* return the number of results */
return 2;
&rightsign; //平均值 函数
void CTestLuaSpDlg::OnLuaF()
&leftsign;
// TODO: 在此添加命令处理程序代码
lua_State *L = lua_open();
/* load Lua base libraries */
lua_baselibopen(L);
lua_register(L, "average", average);
const char *buf = "r1,r2=average(500, 10) return r1,r2"; 返回两个
luaL_dostring(L, buf);
/*lua_pushstring(L,"r1");
lua_pushstring(L,"r2");*/
//lua_gettable(L,LUA_GLOBALSINDEX);
lua_getglobal(L,"r1"); 直接读取全局变量
int result = lua_tonumber(L,-1);
lua_getglobal(L,"r2");
result = lua_tonumber(L, -1);
lua_close(L);
&rightsign;
~~~~~~~~~~~~~~~
void CTestLuaSpDlg::OnLuaG()
&leftsign;
// TODO: 在此添加命令处理程序代码
/* initialize Lua */
L = lua_open();
/* load Lua base libraries */
lua_baselibopen(L);
/* register our function */
lua_register(L, "average", average);
/* run the script */
/*const char *buf = "avg, sum = average(10, 20, 30, 40, 50);return sum";
int ii=luaL_dostring(L, buf);*/
luaL_loadfile(L, "\\\\Storage\\\\Program Files\\\\TestLuaSp\\\\add.lua") ;
//加载后要用lua_resume运行.
lua_resume(L,0);
//调用脚本中函数
lua_getglobal(L, "lua_func1");
//传给lua_func1参数1,参数2
lua_pushnumber(L, 21);
lua_pushnumber(L, 23);
//调用lua中函数,传入个参数,有一个返回值 ,看lua_call 和lua_pcall区别
lua_pcall(L, 2, 2, 0); 要求返回两个返回值
//取值
lua_Number retsum;
//注意返回值是通过-1来获取
retsum = lua_tonumber(L, -1);
lua_pop(L,1);
retsum = lua_tonumber(L, -1);
/* cleanup Lua */
lua_close(L);
&rightsign;
function lua_func1(val1, val2)
–调用cbuilder中函数
val1,val2 = average(val1, val2)
return val1,val2
end
全局变量:
全局变量也是容易的在lua中被处理,像我们看到的。
lua_getglobal()将把lua中的全局变量压入堆栈。如果lua脚本中包括一个叫做"z"的全局变量,例如。这段代码:
lua_getglobal(L, "z");
z = (int)lua_tonumber(L, 1);
lua_pop(L, 1);
这里还有一个相对的设置全局变量的函数lua_setglobal(),例如:
lua_pushnumber(L, 10);
lua_setglobal(L, "z");
在lua文件中不是必须显示的声明一个全局变量。
如果lua文件中没有相应的变量。用lua_setglobal()将会创建这个变量
历史博文
- 20080805 firefox dev addon info - 2009
- 1020 DirectX SDK 版本 WGET - 2007
- 0202 sip exoisp DEMO 1 - 2006
- 扩充文件选择对话框的多选能力 - 2005