比较软件的版本号函数,版本号的形式为3..0.2.1 支持无限位。
/*++
Routine Description:
1.比较版本号, 递归实现
History:
13-November-2007 13:42 - 刘峻聪 - Create
--*/
BOOL CUpdateFun::IsNewVersion(CString strOldVersion, CString strNewVersion)
{
if (strOldVersion == _T("") && strNewVersion == _T(""))
{
return FALSE; // 相等,不是新版本
}
int oldVer = 0; // 取旧版本的第一个版本位
int newVer = 0; // 取新版本的第一个版本位
int posOldVer = 0; // 位标,用于旧版本
int posNewVer = 0; // 位标,用于新版本
posOldVer = strOldVersion.Find(_T("."), 0);
oldVer = posOldVer<0 ? atoi(strOldVersion) : atoi(strOldVersion.Left(posOldVer));
posNewVer = strNewVersion.Find(_T("."), 0);
newVer = posNewVer<0 ? atoi(strNewVersion) : atoi(strNewVersion.Left(posNewVer));
if (oldVer < newVer)
{
return TRUE;
}
else if (oldVer == newVer)
{
CString strOldVersion1 = _T(""); // 旧版本
CString strNewVersion1 = _T(""); // 新版本
if (posOldVer > -1)
{
strOldVersion1 = strOldVersion.Right(strOldVersion.GetLength()-posOldVer-1);
}
if (posNewVer > -1)
{
strNewVersion1 = strNewVersion.Right(strNewVersion.GetLength()-posNewVer-1);
}
return IsNewVersion(strOldVersion1, strNewVersion1);
}
return FALSE;
}