当前位置: 首页 > news >正文

山东网站建设开发上海做推广网站

山东网站建设开发,上海做推广网站,云开发高级布道师,保定移动网站建设在使用cocos2dx c开发项目时#xff0c;通常使用cocos自带的UserDefault来存储一些项目所用到的一些配置信息#xff1a;如游戏的音量#xff0c;游戏的闯关数等... 但是windows平台下#xff0c;测试发现如果用户的帐户名使用是中文#xff0c;在启动程序时会报错#…在使用cocos2dx c开发项目时通常使用cocos自带的UserDefault来存储一些项目所用到的一些配置信息如游戏的音量游戏的闯关数等... 但是windows平台下测试发现如果用户的帐户名使用是中文在启动程序时会报错导致程序无法运行。经过排查把问题定位到CCFileUtils-win32.cpp的FileUtilsWin32::getWritablePath函数中string FileUtilsWin32::getWritablePath() const {     // Get full path of executable, e.g. c:\Program Files (x86)\My Game Folder\MyGame.exe     char full_path[CC_MAX_PATH 1];     ::GetModuleFileNameA(nullptr, full_path, CC_MAX_PATH 1);       // Debug app uses executable directory; Non-debug app uses local app data directory //#ifndef _DEBUG         // Get filename of executable only, e.g. MyGame.exe         char *base_name strrchr(full_path, \\);           if(base_name)         {             char app_data_path[CC_MAX_PATH 1];               // Get local app data directory, e.g. C:\Documents and Settings\username\Local Settings\Application Data             if (SUCCEEDED(SHGetFolderPathA(nullptr, CSIDL_LOCAL_APPDATA, nullptr, SHGFP_TYPE_CURRENT, app_data_path)))             {                 string ret((char*)app_data_path);                   // Adding executable filename, e.g. C:\Documents and Settings\username\Local Settings\Application Data\MyGame.exe                 ret base_name;                   // Remove .exe extension, e.g. C:\Documents and Settings\username\Local Settings\Application Data\MyGame                 ret ret.substr(0, ret.rfind(.));                   ret \\;                   // Create directory                 if (SUCCEEDED(SHCreateDirectoryExA(nullptr, ret.c_str(), nullptr)))                 {                     return convertPathFormatToUnixStyle(ret);                 }             }         } //#endif // not defined _DEBUG       // If fetching of local app data directory fails, use the executable one     string ret((char*)full_path);       // remove xxx.exe     ret  ret.substr(0, ret.rfind(\\) 1);       ret convertPathFormatToUnixStyle(ret);       return ret; } 这里可以看到作者在使用 SUCCEEDED(SHGetFolderPathA(nullptr, CSIDL_LOCAL_APPDATA, nullptr, SHGFP_TYPE_CURRENT, app_data_path)) 这个函数时目的是想通过 CSIDL_LOCAL_APPDATA 来把路径定位到帐户下的APPData目录而CSIDL_LOCAL_APPDATA这个宏的解释是 #define CSIDL_LOCAL_APPDATA             0x001c        // user name\Local Settings\Applicaiton Data (non roaming) 微软在解释SHGetFolderPath时说明了用法 SHGetFolderPathW (Unicode) and SHGetFolderPathA (ANSI) 由于ANSI的兼容性不好很多情况会导致中文乱码所以这里需要修改SHGetFolderPathW来将字符集转成unicode这样比较好用。 修改过后 string FileUtilsWin32::getWritablePath() const {     // Get full path of executable, e.g. c:\Program Files (x86)\My Game Folder\MyGame.exe     char full_path[CC_MAX_PATH 1];     ::GetModuleFileNameA(nullptr, full_path, CC_MAX_PATH 1);       // Debug app uses executable directory; Non-debug app uses local app data directory //#ifndef _DEBUG     // Get filename of executable only, e.g. MyGame.exe     char *base_name strrchr(full_path, \\);       if(base_name)     {      // Get local app data directory, e.g. C:\Documents and Settings\username\Local Settings\Application Data     WCHAR utf16Path[CC_MAX_PATH 1] { 0 };     if(SUCCEEDED(SHGetFolderPathW(nullptr, CSIDL_LOCAL_APPDATA, nullptr, SHGFP_TYPE_CURRENT, utf16Path)))     {             char utf8_path[1024 2] { 0 };         WideCharToMultiByte(CP_UTF8, 0, utf16Path, CC_MAX_PATH 1, utf8_path, 1024 2, NULL, NULL);         string ret((char*)utf8_path);         // Adding executable filename, e.g. C:\Documents and Settings\username\Local Settings\Application Data\MyGame.exe         ret base_name;           // Remove .exe extension, e.g. C:\Documents and Settings\username\Local Settings\Application Data\MyGame         ret ret.substr(0, ret.rfind(.));           ret \\;           // Create directory         if (SUCCEEDED(SHCreateDirectoryExA(nullptr, ret.c_str(), nullptr)))         {             return convertPathFormatToUnixStyle(ret);         }     }      } //#endif // not defined _DEBUG       // If fetching of local app data directory fails, use the executable one     string ret((char*)full_path);       // remove xxx.exe     ret  ret.substr(0, ret.rfind(\\) 1);       ret convertPathFormatToUnixStyle(ret);       return ret; } 这样就解决了中文目录下使用userDefault造成的程序崩溃问题。
http://www.ho-use.cn/article/10824290.html

相关文章:

  • 建怎样的网站挣钱快一号网站建设
  • 家里的电脑ip做网站北京最新发布会直播
  • 网站搭建网手机商城设计
  • 青海省建设厅网站微网站开发与制作个人总结
  • 做网站最好的wordpress 8个安全密匙
  • 电子配件 技术支持 东莞网站建设wordpress 关联文章
  • 无锡优化网站费用输入姓名查询个人征信
  • 通过模版做网站电商企业有哪些
  • 成都网站建设找亮帅wordpress主题加授权方式
  • asp.net 如何设置网站首页邢台网站建设网络优化
  • 办公室装修专业网站wordpress twenty twelve1.4
  • 网站怎么放到服务器上做一个网站需要投入多少钱
  • 织梦导航网站模板重庆网站建设培训机构学费
  • 沈阳市城市建设网站上海黄页企业名录电话
  • 百度官方网站入口网络营销推广方式包括
  • 怎么查有做网站的公司有哪些凡科网站可以做淘宝客吗
  • 做视频网站需要什么条件商城源码价格低 质量好
  • 网站导航栏代码网页设计与制作课程大纲
  • 房县网站建设seo代理计费系统
  • 站长域名查询WordPress超级链接不跳转
  • 网站开发配置表格重庆论坛
  • 背景色搭配网站网站开发阶段流程
  • 女鞋网站建设策划方案江苏建设工程监督
  • 彩网站开发百度会收录双域名的网站么
  • 平凉市建设厅官方网站收录文案网站
  • 纹理网站推荐域名解析工具
  • 网站空间企业个人电商平台系统开发
  • 网站公司的未来asp.net 网站开发项目化教程
  • 做微信小程序和做网站怎么学习企业网站维护
  • 旅游网站流程图中国商业网