가끔 MFC나 Delphi로 프로그램 만들다 보면, 내가 만든 프로그램에 포함된 리소스에서 버젼을 읽어오고 싶을때가 있다.
본 소스는 버젼을 읽어다 뿌려주는 샘플코드입니다.
다음의 코드를 상단부에 선언하시고 String GetVersionInfo(HMODULE hLib, CString csEntry) { CString csRet; if (hLib == NULL) hLib = AfxGetResourceHandle(); HRSRC hVersion = FindResource( hLib, MAKEINTRESOURCE(VS_VERSION_INFO), RT_VERSION ); if (hVersion != NULL) { HGLOBAL hGlobal = LoadResource( hLib, hVersion ); if ( hGlobal != NULL) { LPVOID versionInfo = LockResource(hGlobal); if (versionInfo != NULL) { DWORD vLen,langD; BOOL retVal; LPVOID retbuf=NULL; #ifdef _UNICODE static TCHAR fileEntry[256]; wsprintf(fileEntry,_T("VarFileInfoTranslation")); #else static char fileEntry[256]; sprintf(fileEntry,_T("VarFileInfoTranslation")); #endif retVal = VerQueryValue(versionInfo,fileEntry,&retbuf,(UINT *)&vLen); if (retVal && vLen==4) { memcpy(&langD,retbuf,4); #ifdef _UNICODE wsprintf(fileEntry, _T("StringFileInfo\%02X%02X%02X%02X\%s"), (langD & 0xff00)>>8,langD & 0xff,(langD & 0xff000000)>>24, (langD & 0xff0000)>>16, csEntry); #else sprintf(fileEntry, _T("StringFileInfo\%02X%02X%02X%02X\%s"), (langD & 0xff00)>>8,langD & 0xff,(langD & 0xff000000)>>24, (langD & 0xff0000)>>16, csEntry); #endif } else #ifdef _UNICODE wsprintf(fileEntry, L"StringFileInfo\%04X04B0\%s", GetUserDefaultLangID(), csEntry); #else sprintf(fileEntry, "StringFileInfo\%04X04B0\%s", GetUserDefaultLangID(), (LPCTSTR)csEntry); #endif if (VerQueryValue(versionInfo,fileEntry,&retbuf,(UINT *)&vLen)) #ifdef _UNICODE csRet = (TCHAR*)retbuf; #else csRet = (char*)retbuf; #endif } } UnlockResource( hGlobal ); FreeResource( hGlobal ); } return csRet; }
CString FormatVersion(CString cs) { CString csRet; if (!cs.IsEmpty()) { cs.TrimRight(); int iPos = cs.Find(','); if (iPos == -1) return ""; cs.TrimLeft(); cs.TrimRight(); csRet.Format("%s.", cs.Left(iPos)); while (1) { cs = cs.Mid(iPos + 1); cs.TrimLeft(); iPos = cs.Find(','); if (iPos == -1) { csRet +=cs; break; } csRet += cs.Left(iPos); } } return csRet; }
|
그리고 버젼은 다음과 같이 읽어주시면됩니다.
CString g_Version = FormatVersion(GetVersionInfo(NULL, "FileVersion"));
Tags: MFC version 버젼 윈도우즈
|