Qt에서 DLL 파일 버전 정보 보기

2194 단어 Qt
#Qt 에서 DLL 등 파일 버전 정보 얻기
코드는 다음과 같다.
//   
#include 
#include 

//        
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비트 프로젝트를 구축하는 것을 예로 들어 프로젝트에 있습니다.프로 파일에 추가
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

좋은 웹페이지 즐겨찾기