/*
The following code shows how to get FILEINFO value from resource file.
These WIN32 functions will be used:
* GetFileVersionInfo
* GetFileVersionInfoSize
* VerQueryValue
* GetModuleFileName
*/
#include <windows.h>
#include <tchar.h>
#include <string>
#include <iostream>
#pragma comment(lib, "version.lib")
using namespace std;
bool GetFileVersion(HMODULE hModule, WORD *pBuffer)
{
TCHAR fname[MAX_PATH];
VS_FIXEDFILEINFO *pVi;
DWORD dwHandle;
string str;
if (::GetModuleFileName(hModule, fname, MAX_PATH))
{
int size = GetFileVersionInfoSize(fname, &dwHandle);
if (size > 0) {
BYTE *buffer = new BYTE[size];
if (GetFileVersionInfo(fname, dwHandle, size, buffer)) {
if (VerQueryValue(buffer, _T("\\"), (LPVOID *)&pVi, (PUINT)&size)) {
pBuffer[0] = HIWORD(pVi->dwFileVersionMS);
pBuffer[1] = LOWORD(pVi->dwFileVersionMS);
pBuffer[2] = HIWORD(pVi->dwFileVersionLS);
pBuffer[3] = LOWORD(pVi->dwFileVersionLS);
delete buffer;
return true;
}
}
delete buffer;
}
}
return false;
}
string GetFileVersion(HMODULE hModule)
{
string str;
WORD buffer[4];
if (GetFileVersion(hModule, buffer))
{
char str2[32];
for (int i = 0; i < sizeof(buffer)/sizeof(WORD); i++)
{
itoa(buffer[i], str2, 10);
str += str2;
if (i != sizeof(buffer)/sizeof(WORD) - 1)
{
str += ".";
}
}
}
return str;
}
void main()
{
cout << "Current version is: " << GetFileVersion(::GetModuleHandle(NULL)) << endl;
}
//VC6----persional/ado_test2
//Start
void CADO_TEST2App::GetVersion(CString &strFileVersion, CString &strProductVersion)
{
CString strExePath;
::GetModuleFileName(NULL,strExePath.GetBufferSetLength(MAX_PATH),MAX_PATH);
strExePath.ReleaseBuffer();
//首先获得版本信息资源的长度
DWORD dwHandle = 0;
DWORD dwInfoSize = ::GetFileVersionInfoSize((LPTSTR)(LPCTSTR)strExePath,&dwHandle);//version.lib
//配置 连接或者 #pragma comment(lib,"version.lib")---链接时包含特定文件
//将版本信息资源读入缓冲区
if(dwInfoSize == 0)
return;
TCHAR *pBlock = new TCHAR[dwInfoSize];
GetFileVersionInfo((LPTSTR)(LPCTSTR)strExePath,0,dwInfoSize,pBlock);
//获得生成文件使用的代码页及文件版本
unsigned int uTranslate = 0;
struct LANGANDCODEP