在C++中获取DLL文件的版本信息,可以使用Windows API函数GetFileVersionInfo
和VerQueryValue
。以下是一个简单的示例代码:
#include<iostream>
#include<string>
#include<windows.h>
#include <winver.h>
using namespace std;
bool GetDLLVersionInfo(const string& dllPath, string& versionInfo)
{
DWORD dwHandle;
UINT dwLen;
LPVOID lpData;
VS_FIXEDFILEINFO* pFileInfo;
// 获取文件版本信息
dwLen = GetFileVersionInfoSize(dllPath.c_str(), &dwHandle);
if (dwLen == 0)
{
cout << "GetFileVersionInfoSize failed: "<< GetLastError()<< endl;
return false;
}
lpData = malloc(dwLen);
if (!GetFileVersionInfo(dllPath.c_str(), dwHandle, dwLen, lpData))
{
cout << "GetFileVersionInfo failed: "<< GetLastError()<< endl;
free(lpData);
return false;
}
// 获取VS_FIXEDFILEINFO结构体
if (!VerQueryValue(lpData, "\\", (LPVOID*)&pFileInfo, &dwLen))
{
cout << "VerQueryValue failed: "<< GetLastError()<< endl;
free(lpData);
return false;
}
// 获取文件版本信息
int major = (pFileInfo->dwFileVersionMS >> 16) & 0xFFFF;
int minor = (pFileInfo->dwFileVersionMS >> 0) & 0xFFFF;
int build = (pFileInfo->dwFileVersionLS >> 16) & 0xFFFF;
int revision = (pFileInfo->dwFileVersionLS >> 0) & 0xFFFF;
// 格式化版本信息字符串
versionInfo = to_string(major) + "." + to_string(minor) + "." + to_string(build) + "." + to_string(revision);
free(lpData);
return true;
}
int main()
{
string dllPath = "C:\\path\\to\\your\\dll.dll";
string versionInfo;
if (GetDLLVersionInfo(dllPath, versionInfo))
{
cout << "DLL version: "<< versionInfo<< endl;
}
else
{
cout << "Failed to get DLL version."<< endl;
}
return 0;
}
该示例代码首先调用GetFileVersionInfoSize
和GetFileVersionInfo
函数获取DLL文件的版本信息,然后调用VerQueryValue
函数获取VS_FIXEDFILEINFO
结构体,最后根据结构体中的信息格式化版本信息字符串。
注意:在使用该示例代码时,需要将dllPath
变量设置为目标DLL文件的路径。
领取专属 10元无门槛券
手把手带您无忧上云