昨天想找个版本号比较函数,感觉网上写的太复杂. 就随便写了个简单的.贴上来做个备忘
//=======================================================================
// 函数原型:
// 功能描述: 压缩包版本比当前的高?
// 参数说明: 名称 类型 说明
//
// 返 回 值:
// 依 赖 于:
// 被引用于:
// 创建日期: 2018年3月15日 17时37分49秒
// 修改日期:
// 修改说明:
//=======================================================================
BOOL CXDUpgradeSvrDlg::IsHightVersion()
{
BOOL bRet = FALSE;
theApp.m_strDownloadVersion.Empty();
CString strTmp;
LPBYTE pBuff = NULL;
int iTmp;
DWORD dwCurrVersion=0, dwDownVersion=0; // 两个版本号,拼成dword好比较
int i1, i2, i3; //版本号3段
if ( !CSYSGlobal::IsFileExist( theApp.m_strVersionFilePath ))
{
AddLogMsg( _T("升级包没找到版本信息!不能升级。") );
goto __end;
}
CSYSGlobal::ReadFile2Buff( theApp.m_strVersionFilePath, &pBuff, &iTmp );
if ( iTmp <= 0 )
{
AddLogMsg( _T("版本信息文件错误.") );
goto __end;
}
// 取当前版本号
if(sscanf( theApp.m_IniProperties.szCurrVersion, _T("%d.%d.%d"), &i1, &i2, &i3 ) != 3 )
{
AddLogMsg( _T("当前版本号错误! 必须是3段式,每段值域为[0,255]. 形如:1.1.1") );
goto __end;
}
if ( ( i1 < 0 || i1 > 255 )
|| ( i2 < 0 || i2 > 255 )
|| ( i3 < 0 || i3 > 255 )
)
{
AddLogMsg( _T("当前版本号错误! 必须是3段式,每段值域为[0,255]. 形如:1.1.1") );
goto __end;
}
dwCurrVersion = ( i1&0x000000FF ) << 16;
dwCurrVersion |= ( i2&0x000000FF ) << 8;
dwCurrVersion |= ( i3&0x000000FF );
// 取升级包的版本号
if(sscanf( (char*)pBuff, _T("%d.%d.%d"), &i1, &i2, &i3 ) != 3 )
{
AddLogMsg( _T("升级包版本号错误! 必须是3段式,每段值域为[0,255]. 形如:1.1.1") );
goto __end;
}
if ( ( i1 < 0 || i1 > 255 )
|| ( i2 < 0 || i2 > 255 )
|| ( i3 < 0 || i3 > 255 )
)
{
AddLogMsg( _T("升级包版本号错误! 必须是3段式,每段值域为[0,255]. 形如:1.1.1") );
goto __end;
}
dwDownVersion = ( i1&0x000000FF ) << 16;
dwDownVersion |= ( i2&0x000000FF ) << 8;
dwDownVersion |= ( i3&0x000000FF );
bRet = dwDownVersion > dwCurrVersion ? TRUE : FALSE;
if ( bRet )
{// 将就着保存下载的版本号吧 :)
theApp.m_strDownloadVersion.Format( _T("%s"), (char*)pBuff );
}
__end:
if ( pBuff )
{
delete [] pBuff;
}
return bRet;
}