MFC获取程序集的版本号信息

本文介绍如何在MFC中通过调用Windows API获取当前程序的版本信息。首先,引入Version.lib库,然后使用GetModuleFileName获取模块路径,接着通过GetFileVersionInfoSize和GetFileVersionInfo获取版本信息大小和内容。再利用VerQueryValue解析版本信息,最后将多个语言版本的文件版本号合并成一个字符串并返回。

引入相应lib库文件

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

 函数实现代码,返回一个字符串的版本信息

   CString m_csProductVersion; //版本信息字符串
    char cPath[MAX_PATH];
    ::GetModuleFileName(NULL,cPath,sizeof(cPath));
    DWORD dwHandle,dwInfoSizef;
    dwInfoSizef = GetFileVersionInfoSize(cPath,&dwHandle);
    if(0 == dwInfoSizef)
    {
        AfxMessageBox(_T("获取版本信息失败"));
        return FALSE;
    }
    char *pInfoBuf = new char[dwInfoSizef];
    GetFileVersionInfo(cPath,NULL,dwInfoSizef,pInfoBuf);
    unsigned int cbTranslate = 0;
    struct LANGANDCODEPAGE{
        WORD wLanguage;
        WORD wCodePage;
    }*lpTranslate;
    VerQueryValue(pInfoBuf,TEXT("\\VarFileInfo\\Translation"),(LPVOID*)&lpTranslate,&cbTranslate);
    m_csVer.Empty ();
    for(int i =0 ;i <(cbTranslate / sizeof(struct LANGANDCODEPAGE));i++)
    {
        char SubBlock[MAX_PATH];
        wsprintf(SubBlock,
            TEXT("\\StringFileInfo\\%04x%04x\\FileVersion"),
            lpTranslate[i].wLanguage,
            lpTranslate[i].wCodePage);
        void *lpBuffer = NULL;
        unsigned int dwBytes =0;
        VerQueryValue(pInfoBuf,
            SubBlock,
            &lpBuffer,
            &dwBytes);
        CString strTemp=(char*)lpBuffer;
        m_csProductVersion +=strTemp;
    }
    delete pInfoBuf;//注意删除所申请的动态空间
    return m_csProductVersion ; //返回版本信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值