MFC 程序读取自己的版本号

#pragma comment(lib,"version.lib")

//主版本号 . 子版本号 [ 修正版本号 [. 编译版本号 ]]
//Major_Version_Number.Minor_Version_Number[Revision_Number[.Build_Number]]
int GetFileVerInfo(DWORD &major, DWORD &minor, DWORD &revision, DWORD &build) 
{
    TCHAR AppPathName[MAX_PATH];//应用程序路径 
    ::GetModuleFileName(NULL, AppPathName, MAX_PATH);   

    // 版本信息大小 
    UINT VersionInfoSize = ::GetFileVersionInfoSize(AppPathName, 0);
    if(VersionInfoSize == 0) return VersionInfoSize;  //0 failed

    TCHAR* pVersionInfo = new TCHAR[VersionInfoSize];//申请空间  
    UINT uiSize = 0;

    if (::GetFileVersionInfo(AppPathName, 0, VersionInfoSize, pVersionInfo) != 0)//获取版本信息 
    { 
            VS_FIXEDFILEINFO* verInfo = NULL;

            // 查询根信息,转换成4段的版本号 
            if(::VerQueryValue((LPVOID)(pVersionInfo),_T("\\"),(LPVOID*)(&verInfo),&uiSize))
            {
                major = HIWORD(verInfo->dwFileVersionMS);
                minor= LOWORD(verInfo->dwFileVersionMS);
                revision = HIWORD(verInfo->dwFileVersionLS);
                build= LOWORD(verInfo->dwFileVersionLS);
            }
    }
    delete [] pVersionInfo;    //verInfo will free when pBlock free
    return uiSize;  
}

void CTestView::OnInitialUpdate() 
{
    CView::OnInitialUpdate();

    DWORD major, minor,revision,build;
    GetFileVerInfo(major, minor, revision,build);
 
    TCHAR buf[100];
    wsprintf(buf, "V%d.%d.%d.%d",major, minor, revision,build);
    AfxMessageBox(buf);
}

 

posted @ 2025-04-04 17:43  XGZ21  阅读(40)  评论(0)    收藏  举报