lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


Andreas Stenius a écrit :
You've missed that the first argument is `self', since you call the function with f:AddCombo... as opposed to f.AddCombo...

thanks,
but I use Luna template, so self is already taken care of.
no everything works up to the one,two,three table
Any idea ?

Regards,
Andreas

Noel Frankinet skrev:
Hello all,

I have the following lua statement
c=f:AddCombobox("test",{list={"one","two","three"}})
That I want to decode in C

for the first argument I have :
luaL_checkstring(L, 1)

for the second argument a use :

      GetTableField(L,"list",&contents);

which boils down to

  bool GetTableField(lua_State *L,const char *key,string  *field)
  {
      lua_pushstring(L,key);
      lua_gettable(L,-2);
      if (!lua_istable(L,-1))
      {
          lua_pop(L,1);
          return false;
      }
      if (field)
          *field = TableToXml(L);
      lua_pop(L,1);
      return true;
  }
so far so good
now I want to decode that table ({"one","two","three"})

and I use
  string & TableToXml(lua_State *L)
  {  static string ret;
     ret.clear();
     lua_pushnil(L);  /* first key */
     while (lua_next(L, -1) != 0)
     {
       ret += "<ITEM>";
       ret +=  luaL_checkstring(L, -1);
       ret += "</ITEM>";
lua_pop(L, 1); /* removes `value'; keeps `key' for next iteration */
     }
     return ret;
  }

but does not work, I have messed the stack somewhere, could someone help me ?
A pointer on stack manipulation function from C would be nice
Best regards






--
Noël Frankinet
Gistek Software SA
http://www.gistek.net