Get VersionInfo from resource file | CodeGuru

Get VersionInfo from resource file

. CVersionInfo is a tiny class, which wraps the stuff needed to get the version info from a resource file. It handles both, the fixed version information and the language dependent string version information of the resource file. It contains three CString members which hold the retrieved information: m_strFixedFileVersion: the fixed file version info (language […]

Written By
CodeGuru Staff
CodeGuru Staff
Apr 4, 1999
1 minute read
CodeGuru content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More

.

CVersionInfo is a tiny class, which wraps the stuff needed to get the version info from a resource file.
It handles both, the fixed version information and the language dependent string version information of the resource file.
It contains three CString members which hold the retrieved information:

    m_strFixedFileVersion:  the fixed file version info (language independent)
    m_strFixedProductVersion: the fixed product version info (language independent)
    m_strVersionInfo:   the desired version info string (language dependent)

To get the language dependent string version info you need to set the following parameters as follows:

strLangID:



strLangID is the language ID for which the version info is desired



040904E4 means e.g.:



04

= SUBLANG_ENGLISH_USA



09

- = LANG_ENGLISH



-04E4 = 1252 = Codepage for Windows:Multilingual

strInfoType:



strInfoType is the desired version entry, eg.:

ProductName

, or

ProductVersion

hModule:



hModule ist the Instance handle of the module for which the version info should be retrieved



with EXE

s: Get hModule calling AfxGetInstanceHandle.



with DLL

s: Get hModule calling ::GetModuleHandle (

DLLName

), where

DLLName

is the Name of the module

Important!


CVersionInfo requires to be linked with VERSION.LIB!

Here’s the code:

// VersionInfo.h 

#ifndef VERSIONINFO_H
#define VERSIONINFO_H
#include "stdafx.h"
class CVersionInfo
{
public:
	CString m_strVersionInfo;
	CString m_strFixedFileVersion;
	CString m_strFixedProductVersion;
	CVersionInfo ();
	~CVersionInfo ();
	CVersionInfo (HMODULE hModule, LPCTSTR strLangID = NULL, LPCTSTR strInfoType = NULL);
	CVersionInfo (LPTSTR szFilename, LPCTSTR strLangID = NULL, LPCTSTR strInfoType = NULL);
	void GetVersionInfo (LPTSTR szFilename, LPCTSTR strLangID = NULL, LPCTSTR strInfoType = NULL);
	void GetVersionInfo (HMODULE hModule, LPCTSTR strLangID = NULL, LPCTSTR strInfoType = NULL);
};

#endif // VERSIONINFO_H

// VersionInfo.cpp

//**********************************************************************************************
// CVersionInfo (c)1997 Roberto Rocco 
//----------------------------------------------------------------------------------------------
// CVersionInfo is a tiny class, which wraps the stuff needed to get the version info from a
// resource file.
// It handles both, the fixed version information and the language dependent string version
// information of the resource file.
//
// It contains three CString members which hold the retrieved information:
// m_strFixedFileVersion:  the fixed file version info (language independent)
// m_strFixedProductVersion: the fixed product version info (language independent)
// m_strVersionInfo:   the desired version info string (language dependent)
//
// CVersionInfo requires to be linked with VERSION.LIB!
//
//********************************************************************************************** 
#include "VersionInfo.h"
// Standard-Constructor. Does nothing particular
CVersionInfo::CVersionInfo ()
{
}

// Standard-Destructor. Does nothing particular
CVersionInfo::~CVersionInfo ()
{
}

// Constructor with hModule, strLangId and strInfoType as parameter
CVersionInfo::CVersionInfo (HMODULE hModule, LPCTSTR strLangID/*=NULL*, LPCTSTR strInfoType/*=NULL*)
{
	GetVersionInfo (hModule, strLangID, strInfoType);
}

// Constructor with szFilename, strLangId and strInfoType as parameter
CVersionInfo::CVersionInfo (LPTSTR szFilename, LPCTSTR strLangID/*=NULL*, LPCTSTR strInfoType/*=NULL*)
{
	GetVersionInfo (szFilename, strLangID, strInfoType);
}

void CVersionInfo::GetVersionInfo (HMODULE hModule, LPCTSTR strLangID/*=NULL*, LPCTSTR strInfoType/*=NULL*)
{
	TCHAR szExeName[MAX_PATH];
	if(hModule == NULL)
		  return;
	GetModuleFileName(hModule, szExeName, sizeof (szExeName));
	GetVersionInfo(szExeName, strLangID, strInfoType);
}

//**********************************************************************************************
// GetVersionInfo (requires VERSION.LIB!!!)
//----------------------------------------------------------------------------------------------
// Retrieves the desired version entry from the VERSIONINFO structure of the resource file.
//
// strLangID is the language ID for which the version info is desired
// 040904E4 means e.g.:
// 04------        = SUBLANG_ENGLISH_USA
// --09----        = LANG_ENGLISH
// ----04E4 = 1252 = Codepage for Windows:Multilingual
//
// strInfoType  is the desired version entry, eg.:"ProductName", or "ProductVersion"
//
// hModule ist the Instance handle of the module for which the version info should be retrieved
// with EXE's: Get hModule calling AfxGetInstanceHandle.
// with DLL's: Get hModule calling  ::GetModuleHandle ("DLLName"), where "DLLName" is the Name of the module
//
// the version information is stored in the member variables:
// m_strFixedFileVersion, m_strFixedProductVersion and m_strVersionInfo, where:
// m_strFixedFileVersion and m_strFixedProductVersion contain the fixed version info (language independent) and
// m_strVersionInfo contains the desired version info string (language dependent)
//
//**********************************************************************************************
void CVersionInfo::GetVersionInfo (LPTSTR szFilename, LPCTSTR strLangID/*=NULL*, LPCTSTR strInfoType/*=NULL*)
{
	DWORD dwVerInfoSize;
	DWORD dwHnd;
	void* pBuffer;
	VS_FIXEDFILEINFO *pFixedInfo; // pointer to fixed file info structure
	LPVOID  lpVersion;    // String pointer to 'version' text
	UINT    uVersionLen;   // Current length of full version string
	TCHAR szGetName[500];
	 dwVerInfoSize = GetFileVersionInfoSize(szFilename, &dwHnd);
	 if (dwVerInfoSize)
	{
		  pBuffer = malloc(dwVerInfoSize);
		  if (pBuffer == NULL)
			   return;
		  GetFileVersionInfo(szFilename, dwHnd, dwVerInfoSize, pBuffer);
		  // get the fixed file info (language-independend) 
		  VerQueryValue(pBuffer,_T("\"),(void**)&pFixedInfo,(UINT *)&uVersionLen);
		  m_strFixedProductVersion.Format ("%u,%u,%u,%u", HIWORD (pFixedInfo->dwProductVersionMS),
			              LOWORD (pFixedInfo->dwProductVersionMS),
			              HIWORD (pFixedInfo->dwProductVersionLS),
			              LOWORD (pFixedInfo->dwProductVersionLS));
		  m_strFixedFileVersion.Format ("%u,%u,%u,%u",HIWORD (pFixedInfo->dwFileVersionMS),
			             LOWORD (pFixedInfo->dwFileVersionMS),
			             HIWORD (pFixedInfo->dwFileVersionLS),
			             LOWORD (pFixedInfo->dwFileVersionLS));
		  // get the string file info (language-dependend) 
		  if (strLangID != NULL || strInfoType != NULL)
		  {
			   lstrcpy(szGetName, "\StringFileInfo\");
			   lstrcat (szGetName, strLangID);
			   lstrcat (szGetName, "\");
			   lstrcat (szGetName, strInfoType);
			   // copy version info, if desired entry exists
			   if (VerQueryValue(pBuffer,szGetName,(void**)&lpVersion,(UINT *)&uVersionLen) != 0)
				    m_strVersionInfo = (LPTSTR)lpVersion;
		  }
		  if (pBuffer != NULL)
			   free(pBuffer);
	}
}
CodeGuru Logo

CodeGuru covers topics related to Microsoft-related software development, mobile development, database management, and web application programming. In addition to tutorials and how-tos that teach programmers how to code in Microsoft-related languages and frameworks like C# and .Net, we also publish articles on software development tools, the latest in developer news, and advice for project managers. Cloud services such as Microsoft Azure and database options including SQL Server and MSSQL are also frequently covered.

Property of TechnologyAdvice. © 2026 TechnologyAdvice. All Rights Reserved

Advertiser Disclosure: Some of the products that appear on this site are from companies from which TechnologyAdvice receives compensation. This compensation may impact how and where products appear on this site including, for example, the order in which they appear. TechnologyAdvice does not include all companies or all types of products available in the marketplace.