int Data::VersionConvert(DWORD high,DWORD low)
{
int r= 0;
r+= high>>16;
r<<=4;
r+=high&0x0000ffff;
r<<=4;
r+=low>>16;
r<<=4;
r+=low&0x0000ffff;
return r;
}
int Data::VersionConvert(CString v)
{
int r=0;
try
{
if(v.GetLength()<=0)
throw 1;
v.MakeUpper();
do
{
if(r!=0)
r<<=4;
char c = v.GetAt(0);
if(c>='A'&&c<='F')
r+= (c-'A')+ 10;
else
r+= ::atoi(&c);
v=v.Right(v.GetLength()-2);
}while(!v.IsEmpty());
}
catch(...)
{
}
if(r<=0x0fff)
r = 0;
return r;
}
CString Data::VersionConvert(int v)
{
CString r = "";
try
{
if(v<=0)
throw 1;
int begin = 3;
do
{
if(!r.IsEmpty())
r+=".";
int t = v>>(4*begin);
CString tmp;
tmp.Format("%X",t);
r+=tmp;
v=v-(t<<(4*begin));
begin--;
if(begin<0)
break;
}while(v>=0);
}
catch(...)
{
}
return r;
}
TCHAR path[MAX_PATH];
::GetModuleFileName(NULL,path,MAX_PATH);
DWORD dwSize = GetFileVersionInfoSize(path,NULL);
TCHAR * versionbuf = new TCHAR[dwSize];
if(!GetFileVersionInfo(path,NULL,dwSize,versionbuf))
throw Tools::Exception("取本地程序版本失败");
VS_FIXEDFILEINFO * versioninfo;
UINT uSize = sizeof(versioninfo);
VerQueryValue(versionbuf,"//",(LPVOID *)&versioninfo,&uSize);
VersionClient = VersionConvert(versioninfo->dwFileVersionMS,versioninfo->dwFileVersionLS);