本站网址: YippeeSoft开心软件
20070709 LUA 调用 C 函数 返回值 luaL_dostring
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=average(500, 10) return r1"; 返回一个
luaL_dostring(L, buf);
lua_pushstring(L,"r1");
lua_gettable(L,LUA_GLOBALSINDEX); 全局索引
int result = lua_tonumber(L,-1);
lua_close(L);
&rightsign;
~~~~~~~~~~~~~~
#undef luaL_dostring
#define luaL_dostring(L,s) \\
(luaL_loadstring(L, s) &line;&line; lua_pcall(L, 0, LUA_MULTRET, 0)) 重新定义宏
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=average(500, 10) return r1";
luaL_dostring(L, buf);
/*lua_pushstring(L,"r1");
lua_gettable(L,LUA_GLOBALSINDEX);*/
int result = lua_tonumber(L,-1);
result = lua_tonumber(L, -1);
lua_close(L);
&rightsign;
原因:现在版本 luaL_dostring 默认没有返回值了
In Lua 5.1, luaL_dostring is defined as
luaL_loadstring(L, s) &line;&line; lua_pcall(L, 0, 0, 0)
and so it ignores returns.
Try this:
#undef luaL_dostring
#define luaL_dostring(L,s) \\
(luaL_loadstring(L, s) &line;&line; lua_pcall(L, 0, LUA_MULTRET, 0))
~~~~~~~~~~~~~~~~~~~
原创文章,转载请注明: 转载自YippeeSoft开心软件
历史博文
- c# FTP 1 - 2010
- 20080804 firefox addon 插件 资料 - 2009
- 1019 DirectShow DirectX SDK Extra - 2007
- 0201 老学庵笔记 如夫人 汉服 - 2006
- 轻松备份和恢复IE、OE配置 - 2005
评论