Qt下获取DLL文件版本信息

#Qt下获取DLL等文件版本信息

代码如下

//头文件
#include <windef.h>
#include <winver.h>

//获取文件版本信息
bool FileVersion::getFileVersion(const QString &filename, QString &version)
{
    std::string namestr = filename.toStdString();
    DWORD dwLen = GetFileVersionInfoSize(filename.toStdWString().c_str(), nullptr);
    if(dwLen == 0)
        return  false;

    char * pData;
    pData = new char[dwLen +1];
    bool bsuccess = GetFileVersionInfoA(filename.toStdString().c_str(), 0, dwLen, pData);
    if(!bsuccess)
        return  false;

    struct LANGANDCODEPAGE
            {
              WORD wLanguage;
              WORD wCodePage;
            } *lpTranslate;
    LPVOID lpBuffer = nullptr;
    UINT uLen = 0;
    bsuccess = VerQueryValue(pData, (TEXT("\\VarFileInfo\\Translation")), (LPVOID*)&lpTranslate, &uLen);
    if(!bsuccess)
        return  false;

    QString str1, str2;
    str1.setNum(lpTranslate->wLanguage, 16);
    str2.setNum(lpTranslate->wCodePage, 16);
    str1 = "000" + str1;
    str2 = "000" + str2;
    QString verPath = "\\StringFileInfo\\"+ str1.right(4) + str2.right(4) +"\\FileVersion";

    bsuccess = VerQueryValue(pData, (verPath.toStdWString().c_str()), &lpBuffer, &uLen);
    if(!bsuccess)
        return false;

    version = QString::fromUtf16((const unsigned short int *)lpBuffer);
    return true;
}

##调试中发现的问题及解决办法:
###问题1:报错#error: “No Target Architecture”
以构建32位项目为例,在项目的.pro文件中添加

DEFINES += _X86_

如构建为64位项目,则添加

DEFINES += _AMD64_

###问题2:无法解析符号GetFileVersionInfoSize、GetFileVersionInfoA、VerQueryValue
以构建32位项目为例,在项目的.pro文件中添加version.lib,

win32: LIBS += -L'C:/Program Files (x86)/Windows Kits/10/Lib/10.0.17763.0/um/x86/' -lVersion

INCLUDEPATH += 'C:/Program Files (x86)/Windows Kits/10/Lib/10.0.17763.0/um/x86'
DEPENDPATH += 'C:/Program Files (x86)/Windows Kits/10/Lib/10.0.17763.0/um/x86'

如构建64位项目,则添加相应的Version.lib

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值