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开心软件

本文链接地址: 20070709 LUA 调用 C 函数 返回值 luaL_dostring

历史博文

标签:, , , , ,