Qt에서 DLL 파일 버전 정보 보기
2194 단어 Qt
코드는 다음과 같다.
//
#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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Qt로 문자와 이미지의 혼합 텍스트 그리기텍스트를 그리려면 QPainter::drawText 함수를 사용하지만 텍스트와 동시에 이미지 (아이콘 등)를 함께 그리기를 원합니다. QLabel와 QPushButton는 이미지와 텍스트를 표시하는 기능을 가지고 있...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.