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

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