0

我试图使用此功能来获取任何文件的版本,但我的问题是当我计算出它显示为铲子的值时。我知道我在屏幕上打印值的方式没有任何问题,所以它一定是我的函数内部的东西....我只是不知道它可能是什么。我尝试将 CompleteVer 的字符串从字符串更改为 char 数组,但出现了一些问题。

string GetFileVersion(HANDLE hprocess)
{
    VS_FIXEDFILEINFO* FFI;
    UINT FFISize;
    BYTE* VersionInfo;
    char Path[MAX_PATH];
    int VersionSeg[4] = {0};
    string CompleteVer;

    if(GetModuleFileNameEx(hprocess,0,Path,sizeof(Path)))
        if(int FilePropSize = GetFileVersionInfoSize(Path,0))
        {
            VersionInfo = new BYTE[FilePropSize];
            if(GetFileVersionInfo(Path,0,FilePropSize,VersionInfo))
                if(VerQueryValue(VersionInfo,"\\",(void**)&FFI,&FFISize))
                {
                    VersionSeg[0] = HIWORD(FFI->dwFileVersionMS);
                    VersionSeg[1] = LOWORD(FFI->dwFileVersionMS);
                    VersionSeg[2] = HIWORD(FFI->dwFileVersionLS);
                    VersionSeg[3] = LOWORD(FFI->dwFileVersionLS);
                    delete[] VersionInfo;

                    for(int x = 0;x < 4;x++)
                    {
                        CompleteVer += VersionSeg[x];
                    }

                    return CompleteVer;
                }
            else
                return "3";
        }
        else
            return "2";
    else
        return "1";
}

输出:♠</p>

4

1 回答 1

0

看起来您正在int从结构中获取一些值并将它们附加到字符串中,而无需先转换为字符。如果您要获取的值是 ASCII,那么您应该声明VersionSegchar [4],如果不是,那么您需要执行添加到'0'. 并检查它们是否是小于 10 的十进制数字。

于 2013-07-12T05:45:55.913 回答