Problema com retorno de objeto userdata

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

Problema com retorno de objeto userdata

Paulo
Bom dia pessoal, estou criando uma extensão para Lua de uma biblioteca c++ e estou com problemas ao retornar o objeto do usuário,
mas o estranho é que isso só ocorre para os objetos retornados pelas funções que foram registradas usando o lua_register, por exemplo 

lua_register(_luaState, "intersection", lua_intersection);
lua_register(_luaState, "difference", lua_difference);

A função intersection retorna um objeto Layer encapsulado num objeto TaLuaInputData e este objeto é utilizado como parâmetro de entrada na função merge mas na hora de verificar o tipo do objeto ele não reconhece o tipo, o estranho é que isso funciona para os objetos retornados pelo método loadLayer, a diferença é a forma que estou registrando

luaL_Reg layerMethods[] = {{"load", loadLayer}, {"remove", removeLayer}, {"exist", layerExist}, {"getColumns", getLayerColumns},{NULL, NULL}};
luaL_newmetatable(lua, "luaL_Layer");
luaL_register(lua, NULL, layerMethods);
lua_pushvalue(lua, -1);
lua_setfield(lua, -1, "__index");
lua_setglobal(lua, "Layer");

estou retornando o objeto assim...

TaLuaInputData **inputData = (TaLuaInputData **)lua_newuserdata(luaState, sizeof(TaLuaInputData *));
*inputData = new TaLuaInputData(layer);
luaL_getmetatable(luaState, "luaL_InputData");
lua_setmetatable(luaState, -2); 

e para checar o tipo do objeto:

static TaLuaInputData* checkInputData (lua_State *L, int index)
{
return *(TaLuaInputData **)luaL_checkudata(L, index, "luaL_InputData");
}


Bom, acho que consegui explicar o problema, espero que alguém possa me ajudar
Agradeço desde já...


--
Lua BR - http://groups.google.com/group/lua-br