VC++MFC中取得资源中VS_VERSINO_INFO的版本号
在MFC中获取VS_VERSION_INFO版本号可通过以下方式实现,该方法综合了版本资源解析和API调用技术
VersionHelper.h
- #pragma once
- #include <afxver_.h>
- #include <winver.h>
- #pragma comment(lib, "version.lib")
- class CVersionHelper {
- public:
- static BOOL GetFileVersion(CString& strVersion);
- static BOOL GetProductVersion(CString& strVersion);
- };
复制代码 VersionHelper.cpp
- "stdafx.h"
- #include "VersionHelper.h"
- BOOL CVersionHelper::GetFileVersion(CString& strVersion) {
- TCHAR szPath[MAX_PATH];
- GetModuleFileName(NULL, szPath, MAX_PATH);
-
- DWORD dwHandle;
- DWORD dwSize = GetFileVersionInfoSize(szPath, &dwHandle);
- if(dwSize == 0) return FALSE;
- BYTE* pData = new BYTE[dwSize];
- if(!GetFileVersionInfo(szPath, dwHandle, dwSize, pData)) {
- delete[] pData;
- return FALSE;
- }
- VS_FIXEDFILEINFO* pFileInfo;
- UINT uiLen;
- if(VerQueryValue(pData, _T("\"), (LPVOID*)&pFileInfo, &uiLen)) {
- strVersion.Format(_T("%d.%d.%d.%d"),
- HIWORD(pFileInfo->dwFileVersionMS),
- LOWORD(pFileInfo->dwFileVersionMS),
- HIWORD(pFileInfo->dwFileVersionLS),
- LOWORD(pFileInfo->dwFileVersionLS));
- delete[] pData;
- return TRUE;
- }
- delete[] pData;
- return FALSE;
- }
- BOOL CVersionHelper::GetProductVersion(CString& strVersion) {
- // 实现与GetFileVersion类似,替换为dwProductVersionMS/LS
- // ...
- }
复制代码使用示例:
CString strVer;
if(CVersionHelper::GetFileVersion(strVer)) {
AfxMessageBox(strVer);
} 关键点说明: - 需链接version.lib库
- VS_FIXEDFILEINFO结构体包含完整的版本信息
- 版本号格式为:主版本.次版本.修订号.构建号
- 资源文件中需正确定义VS_VERSION_INFO
该方法可获取RC文件中定义的完整版本信息,适用于MFC应用程序版本检测场景
|