(ファイル)バージョン文字列を扱うクラス (CVersionStringT) - Windows
"1.0.0.1"や"1.00.000.2"といった(ファイル)バージョン文字列を
扱うクラスです。
---
#pragma once
#include <vector>
////////////////////////////////////////////////////////////////////////////////
// CVersionStringT
template <int t_nCount>
class CVersionStringT
{
protected:
typedef CVersionStringT<t_nCount> thisClass;
public:
CVersionStringT() : m_dwVals(t_nCount)
{
this->SetVersion(_T(""));
}
CVersionStringT(LPCTSTR szVersion) : m_dwVals(t_nCount)
{
this->SetVersion(szVersion);
}
~CVersionStringT()
{
}
public:
CString GetVersion()
{
return thisClass::Convert(&m_dwVals[0]);
}
void SetVersion(LPCSTR szVersion)
{
thisClass::Parse(szVersion, &m_dwVals[0]);
}
public:
int Compare(thisClass VersionString)
{
return thisClass::Compare(*this, VersionString);
}
public:
static CString Convert(DWORD* dwVersion)
{
CString strVersion;
for (int i = 0; i < t_nCount; i++)
{
TCHAR szValue[16] = { 0 };
_itot(dwVersion[i], szValue, 10);
if (i == 0)
{
strVersion = szValue;
}
else
{
strVersion += CString(_T(".")) + szValue;
}
}
return strVersion;
}
void Parse(LPCTSTR szVersion, DWORD* dwVersion)
{
CString strVersion = szVersion;
for (int i = 0; i < t_nCount; i++)
{
int nLength = strVersion.Find(_T("."), 0);
if (nLength == -1)
{
CString str = strVersion.Left(strVersion.GetLength());
nLength = strVersion.GetLength();
dwVersion[i] = _tstoi(str);
}
else
{
CString str = strVersion.Left(nLength);
dwVersion[i] = _tstoi(str);
}
strVersion = strVersion.Right(strVersion.GetLength() - nLength - 1);
}
}
static int Compare(LPCTSTR szVersion1, LPCTSTR szVersion2)
{
thisClass VersionString1(szVersion1);
thisClass VersionString2(szVersion2);
return thisClass::Compare(VersionString1, VersionString2);
}
static int Compare(const thisClass& VersionString1, const thisClass& VersionString2)
{
for (int i = 0; i < t_nCount; i++)
{
if (VersionString1.m_dwVals[i] < VersionString2.m_dwVals[i])
{
return -1;
}
else if (VersionString1.m_dwVals[i] > VersionString2.m_dwVals[i])
{
return 1;
}
}
return 0;
}
public:
std::vector<DWORD> m_dwVals;
};
typedef CVersionStringT<3> CMsiVersionString;
typedef CVersionStringT<4> CFileVersionString;
---
投稿日時 : 2007年4月13日 13:24
Tweet

コメントを追加
# re: (ファイル)バージョン文字列を扱うクラス (CVersionStringT) - Windows 2007年4月13日 19:29 渋木宏明(ひどり)
比較とかの演算子は定義しないの?# re: (ファイル)バージョン文字列を扱うクラス (CVersionStringT) - Windows 2007年4月14日 6:49 菊池
Compareがあるだけじゃ納得いかん人もう一人追加