【BUG报告】cc.FileUtil.listFilesRecursively问题

技术领域:
LuaBinding

出现错误的代码(lua):

local paths={}
cc.FileUtil:getInstance():listFilesRecursively(dirName,paths)

原因分析:

[[FileUtils::listFilesRecursively]]函数的第二个参数为 [[std::vectorstd::string *files]]

在lua_cocos2dx_auto.cpp中的lua_cocos2dx_FileUtils_listFilesRecursively 函数中,定义了FileUtils::listFilesRecursively到lua端的绑定方法。

在lua_cocos2dx_FileUtils_listFilesRecursively 函数内,试图将一个lua对象转换为一个std::vectorstd::string对象:
auto ok &= luaval_to_object<std::vector<std::basic_string, std::allocator<std::basic_string > >>(tolua_S, 3, “std::vector<std::basic_string, std::allocator<std::basic_string > >*”,&arg1, “cc.FileUtils:listFilesRecursively”);

或许可行的解决方案:
把[[FileUtils::listFilesRecursively]]函数放到manual中手动绑定到lua端,
并将[[lua_cocos2dx_FileUtils_listFilesRecursively]]函数源代码改为

int lua_cocos2dx_FileUtils_listFilesRecursively(lua_State* tolua_S)
{
int argc = 0;
cocos2d::FileUtils* cobj = nullptr;
bool ok = true;

#if COCOS2D_DEBUG >= 1
tolua_Error tolua_err;
#endif

#if COCOS2D_DEBUG >= 1
if (!tolua_isusertype(tolua_S,1,“cc.FileUtils”,0,&tolua_err)) goto tolua_lerror;
#endif

cobj = (cocos2d::FileUtils*)tolua_tousertype(tolua_S,1,0);

#if COCOS2D_DEBUG >= 1
if (!cobj)
{
tolua_error(tolua_S,“invalid ‘cobj’ in function ‘lua_cocos2dx_FileUtils_listFilesRecursively’”, nullptr);
return 0;
}
#endif

argc = lua_gettop(tolua_S)-1;
if (argc == 1) 
{
    std::string arg0;
    std::vector<std::basic_string<char>, std::allocator<std::basic_string<char> > > arg1;

    ok &= luaval_to_std_string(tolua_S, 2,&arg0, "cc.FileUtils:listFilesRecursively");

    if(!ok)
    {
        tolua_error(tolua_S,"invalid arguments in function 'lua_cocos2dx_FileUtils_listFilesRecursively'", nullptr);
        return 0;
    }
    cobj->listFilesRecursively(arg0, &arg1);
    ccvector_std_string_to_luaval(tolua_S, arg1);
    return 1;
}
luaL_error(tolua_S, "%s has wrong number of arguments: %d, was expecting %d \n", "cc.FileUtils:listFilesRecursively",argc, 2);
return 0;

#if COCOS2D_DEBUG >= 1
tolua_lerror:
tolua_error(tolua_S,"#ferror in function ‘lua_cocos2dx_FileUtils_listFilesRecursively’.",&tolua_err);
#endif

return 0;

}

使用版本cocos2dx -3.15