Files
2022-10-26 12:25:11 +08:00

115 lines
2.0 KiB
C++

#include ".\versioninfo.h"
#include "windows.h"
CVersionInfo::CVersionInfo(void)
{
for( int i = 0; i < MAX_VERSION_COUNT; i++)
m_byVer[i] = 0;
}
CVersionInfo::~CVersionInfo(void)
{
}
byte CVersionInfo::GetVersion( int nNum )
{
if( nNum < 0 || nNum >= MAX_VERSION_COUNT )
return 0;
return m_byVer[nNum];
}
void CVersionInfo::Init()
{
for( int i = 0; i < MAX_VERSION_COUNT; i++ )
m_byVer[i] = 0;
}
bool CVersionInfo::SetVersion( int nNum, byte byVer )
{
if( nNum < 0 || nNum >= MAX_VERSION_COUNT )
return false;
m_byVer[nNum] = byVer;
return true;
}
unsigned int CVersionInfo::GetTotalVersion()
{
unsigned int nTotalVer = 0;
for( int i = 0; i < MAX_VERSION_COUNT; i++ )
{
if( i == (MAX_VERSION_COUNT - 1) )
nTotalVer += m_byVer[i];
else
nTotalVer += m_byVer[i] * ( 256*( MAX_VERSION_COUNT-(i+1) ) );
}
return nTotalVer;
}
// 01.02.03 과 같은 문자열에서 각각의 버전을 뽑아내는 함수.
bool CVersionInfo::SetVersionFromString( char* pszVersion )
{
if( pszVersion == NULL || (strcmp( pszVersion, "" ) == 0) )
return false;
Init();
string strVersion = pszVersion;
int nCnt = 0;
while( strVersion.size() != 0)
{
if( nCnt >= MAX_VERSION_COUNT )
break;
int nIdx = (int)strVersion.find('.');
if( nIdx == string::npos )
{
if( !strVersion.empty() )
{
m_byVer[nCnt] = atoi( strVersion.c_str() );
}
strVersion.clear();
}
else
{
string strVer = strVersion.substr( 0, nIdx );
m_byVer[nCnt] = atoi( strVer.c_str() );
strVersion.erase( 0, nIdx + 1);
nCnt++;
}
}
return true;
}
//현재 입력되어 있는 버전정보를 문자열 형태로 반환한다.
bool CVersionInfo::GetStringVersion( char* OUT pszVersion, int nSize )
{
if( pszVersion == NULL ) return false;
memset( pszVersion, 0, nSize );
char szTemp[MAX_VERSION_CHAR_SIZE];
for( int i = 0; i < MAX_VERSION_COUNT; i++ )
{
memset( szTemp, 0, MAX_VERSION_CHAR_SIZE );
_snprintf( szTemp, MAX_VERSION_CHAR_SIZE, "%d\0", m_byVer[i] );
if( i != (MAX_VERSION_COUNT - 1) )
strcat( szTemp, ".\0" );
strcat( pszVersion, szTemp );
}
return true;
}