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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章