在项目中显示版本号

来源:互联网 发布:男士皮鞋推荐知乎 编辑:程序博客网 时间:2024/05/22 14:05

//获取版本号
#pragma comment(lib,"Version.lib")
BOOL GetFileVersion(TCHAR * pFileName,TCHAR * pVersion)   
{   
    if(pFileName == NULL || pVersion == NULL)
        return FALSE;

    DWORD dwVerSize;   
    DWORD dwHandle;
    LPVOID pVerBuffer = NULL;

    dwVerSize = GetFileVersionInfoSize(pFileName, &dwHandle);   
    if (dwVerSize == 0)   
        return FALSE;

    pVerBuffer = new BYTE[dwVerSize+1];

    if (GetFileVersionInfo(pFileName, 0, dwVerSize, pVerBuffer))   
    {   
        VS_FIXEDFILEINFO * pInfo = NULL;   
        unsigned int nInfoLen;   

        unsigned int  cbTranslate = 0;
        struct LANGANDCODEPAGE {
            WORD wLanguage;
            WORD wCodePage;
        } *lpTranslate;
        TCHAR szVersionTmp[128] = {0};
        BOOL bVerQuery = VerQueryValue(pVerBuffer, TEXT("\\VarFileInfo\\Translation"),(LPVOID*)&lpTranslate,&cbTranslate);
        // Read the file description for each language and code page.
        for( int i=0; i < (cbTranslate/sizeof(struct LANGANDCODEPAGE)); i++ )
        {
            char  SubBlock[200];
            wsprintf(SubBlock,
                TEXT("\\StringFileInfo\\%04x%04x\\FileVersion"),
                lpTranslate[i].wLanguage,
                lpTranslate[i].wCodePage);
            void *lpBuffer=NULL;
            unsigned int dwBytes=0;
            bVerQuery = VerQueryValue(pVerBuffer,
                SubBlock,
                &lpBuffer,
                &dwBytes);
            CString strTemp=(char *)lpBuffer;
            strcat(szVersionTmp,strTemp);
        }
        if(bVerQuery)  
        {  
            strcpy(pVersion,szVersionTmp);

            if(pVerBuffer != NULL)
            {
                delete []pVerBuffer;
            }
            return TRUE;   
        }   
    }   

    if(pVerBuffer != NULL)
    {
        delete []pVerBuffer;
    }
    return FALSE;