none
windows桌面应用调用LUA脚本 RRS feed

  • 问题

  • 我用DesktopAppConverter工具自己打包了一个APP,在我的APP运行的时候需要调用程序文件夹内部的LUA脚本,我在打包以前程序能正常运行和调用LUA脚本的,打包成桌面应用以后,调用路径出现问题,提示Get data from file(scripts/main.lua) failed! 我的c++代码是这样写的调用路径 string path = CCFileUtils::sharedFileUtils()->fullPathForFilename("scripts/main.lua");就是默认当前路径调用,我想知道,打包成桌面应用这个调用路径应该怎么写?
    2018年4月28日 4:19

全部回复

  • Hi,

    感谢在MSDN论坛发帖。

    >> 我的c++代码是这样写的调用路径 string path = CCFileUtils::sharedFileUtils()->fullPathForFilename("scripts/main.lua");就是默认当前路径调用,我想知道,打包成桌面应用这个调用路径应该怎么写?

    请问你的fullPathForFilename方法是如何实现的?

    对于这个问题,在我看来,这个问题是因为你打包后的app已经不包含scripts文件夹。所以无法找到其路径。建议你尝试其他路径。

    该论坛是关于c++代码开发微软产品时出现的问题,对于第三方库CCFileUtils开发,建议到相关论坛寻求帮助。

    谢谢你的理解与支持。

    Best Regards,

    Baron Bi


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2018年4月30日 1:42
  • 你好,

    非常感谢花时间答复我的问题!

    我的app打包后是包含了scripts文件夹的,fullPathForFilename方法是通过调用DWORD GetCurrentDirectoryW(DWORD nBufferLength, LPWSTR lpBuffer) 这个win32API函数来获取当前的工作目录

        bool CCFileUtilsWin32::init()  
        {  
            _checkPath();  
            m_strDefaultResRootPath = s_pszResourcePath;  
            return CCFileUtils::init();  
        }  
        static void _checkPath()  
        {  
            if (! s_pszResourcePath[0])  
            {  
                WCHAR  wszPath[MAX_PATH] = {0};  
                int nNum = WideCharToMultiByte(CP_ACP, 0, wszPath,  
                    GetCurrentDirectoryW(sizeof(wszPath), wszPath),  
                    s_pszResourcePath, MAX_PATH, NULL, NULL);  
                s_pszResourcePath[nNum] = '\\';  
            }  
        }  
    
    

    打包后的应用,直接在打包目录通过EXE文件运行是正常的,但是通过auto-generated.cer 文件安装证书,再通过appx应用包文件安装应用,再通过开始菜单运行就不能获取当前工作目录了

    2018年4月30日 15:02
  • 我把GetCurrentDirectoryW换成了GetModuleFileName函数,但是结果依然不变,仍然无法调用LUA脚本

    using namespace std;
    
    NS_CC_BEGIN
    
    static char s_pszResourcePath[MAX_PATH] = {0};
    
    static void _checkPath()
    {
        if (! s_pszResourcePath[0])
        {
            WCHAR  wszPath[MAX_PATH] = {0};
            int nNum = WideCharToMultiByte(CP_ACP, 0, wszPath,
    			GetModuleFileName(NULL, wszPath, sizeof(wszPath)),
                s_pszResourcePath, MAX_PATH, NULL, NULL);
            s_pszResourcePath[nNum] = '\\';
        }
    }
    完全找不到原因了

    2018年4月30日 17:35