typedef struct SYSTEMINIT
{
char computer[12];
char user[12];
char os[12];
char disk[12];
char processor[12];
char mem[12];

}SYSTEMINIT;这个结构如何改才能够适应下面的函数??
编译时总提示“error C2520: conversion from unsigned __int64 to double not implemented, use signed __int64”
请教了。
BOOL GetPeerSystemInfo(SYSTEMINIT & sysinfo)
{
/////get computer name///////
TCHAR computerbuf[256];
DWORD computersize=256;
memset(computerbuf,0,256);
if(!GetComputerName(computerbuf,&computersize))
return false;
computerbuf[computersize]=0;
sysinfo.computer[0]=0;
strcat(sysinfo.computer,"计算机: ");
strcat(sysinfo.computer,computerbuf);
///////get user name/////////
TCHAR userbuf[256];
DWORD usersize=256;
memset(userbuf,0,256);
if(!GetUserName(userbuf,&usersize))
return false;
userbuf[usersize]=0;
sysinfo.user[0]=0;
strcat(sysinfo.user,"用户名: ");
strcat(sysinfo.user,userbuf);
///////get version//////////
sysinfo.os[0]=0;
strcat(sysinfo.os,"操作系统: ");
OSVERSIONINFO osvi;
memset(&osvi,0,sizeof(osvi));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
if(!GetVersionEx(&osvi))
return false;
switch (osvi.dwPlatformId)
{
      case VER_PLATFORM_WIN32_NT:
          if ( osvi.dwMajorVersion <= 4 )
 strcat(sysinfo.os,"Microsoft Windows NT ");
         if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0 )
 strcat(sysinfo.os,"Microsoft Windows 2000 ");
         HKEY hKey;
         char szProductType[80];
         DWORD dwBufLen;
         RegOpenKeyEx( HKEY_LOCAL_MACHINE,
               "SYSTEM\\CurrentControlSet\\Control\\ProductOptions",
               0, KEY_QUERY_VALUE, &hKey );
         RegQueryValueEx( hKey, "ProductType", NULL, NULL,
               (LPBYTE)szProductType, &dwBufLen);
         RegCloseKey(hKey);
         if ( lstrcmpi( "WINNT", szProductType) == 0 )
 strcat(sysinfo.os,"Professional, " );
         if ( lstrcmpi( "LANMANNT", szProductType) == 0 )
             strcat(sysinfo.os,"Server, " );
         if ( lstrcmpi( "SERVERNT", szProductType) == 0 )
             strcat(sysinfo.os,"Advanced Server, " );
         if ( osvi.dwMajorVersion <= 4 )
         {
 char temp[256];
 sprintf(temp,"version %d.%d %s (Build %d)\n",
               osvi.dwMajorVersion,
               osvi.dwMinorVersion,
               osvi.szCSDVersion,
               osvi.dwBuildNumber & 0xFFFF);
 strcat(sysinfo.os,temp);
         }
         else
         { 
 char temp[256];
             sprintf(temp,"%s (Build %d)\n",
               osvi.szCSDVersion,
               osvi.dwBuildNumber & 0xFFFF);
 strcat(sysinfo.os,temp);
         }
         break;
      case VER_PLATFORM_WIN32_WINDOWS:
         if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0)
         {
             strcat(sysinfo.os,"Microsoft Windows 95 ");
             if ( osvi.szCSDVersion[1] == 'C' || osvi.szCSDVersion[1] == 'B' )
                strcat(sysinfo.os,"OSR2 " );
         }          if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 10)
         {
             strcat(sysinfo.os,"Microsoft Windows 98 ");
             if ( osvi.szCSDVersion[1] == 'A' )
                strcat(sysinfo.os,"SE " );
         }          if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 90)
         {
             strcat(sysinfo.os,"Microsoft Windows Millennium Edition ");
         } 
         break;
    }
///////////get disk space/////////////
sysinfo.disk[0]=0;
strcat(sysinfo.disk,"磁盘空间: ");
DWORD maskdriver;
ULONGLONG totalspace=0,freespace=0;
ULONGLONG ulltotalspace,ullfreespace,freebyte;
DWORD drivertype;
char driver[10];
if(!(maskdriver=GetLogicalDrives()))
return false;
for(int i=0;i<26;i++)
{
if(!(maskdriver>>i))
break;
if(maskdriver>>i&1)
{
driver[0]=i+'A';
driver[1]=':';
driver[2]='\\';
driver[3]=0;
drivertype=GetDriveType(driver);
if(drivertype!=DRIVE_FIXED)
continue;
if(!GetDiskFreeSpaceEx (driver,
(PULARGE_INTEGER)&freebyte,
(PULARGE_INTEGER)&ulltotalspace,
(PULARGE_INTEGER)&ullfreespace))
return false;
totalspace+=ulltotalspace;
freespace+=ullfreespace;
}
}
double dfreespace=0.0,dtotalspace=0.0,lv;
dfreespace=(double)freespace/(1024*1024*1024);
dtotalspace=(double)totalspace/(1024*1024*1024);
lv=(double)freespace/totalspace*100;
char space[256];
sprintf(space,"总磁盘空间为:%.2fG,剩余磁盘空间为:%.2fG(占%.2f%c)",dtotalspace,dfreespace,lv,'%');
strcat(sysinfo.disk,space);
////////////////get cpu info//////////////////
sysinfo.processor[0]=0;
strcat(sysinfo.processor,"CPU: ");
HKEY hKey;
char szcpuinfo[80];
DWORD dwBufLen=80;
RegOpenKeyEx( HKEY_LOCAL_MACHINE,
   "HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0",
   0, KEY_QUERY_VALUE, &hKey );
RegQueryValueEx( hKey, "VendorIdentifier", NULL, NULL,
   (LPBYTE)szcpuinfo, &dwBufLen);
szcpuinfo[dwBufLen]=0;
strcat(sysinfo.processor,szcpuinfo);
strcat(sysinfo.processor," ");
memset(szcpuinfo,0,80);
dwBufLen=80;
RegQueryValueEx( hKey, "Identifier", NULL, NULL,
   (LPBYTE)szcpuinfo, &dwBufLen);
szcpuinfo[dwBufLen]=0;
strcat(sysinfo.processor,szcpuinfo);
DWORD f;
dwBufLen=8;
RegQueryValueEx( hKey, "~MHz", NULL, NULL,
   (LPBYTE)&f, &dwBufLen);
char hz[10];
sprintf(hz," %dMHZ",f);
strcat(sysinfo.processor,hz);
RegCloseKey(hKey);
/////////////get mem size////////////
MEMORYSTATUS ms;
GlobalMemoryStatus(&ms);
char membuf[256];
sprintf(membuf,"物理内存: 总物理内存:%dMB,可用内存:%dMB (占%.2f%s)",ms.dwTotalPhys/1024/1024,ms.dwAvailPhys/1024/1024
,(double)ms.dwAvailPhys/ms.dwTotalPhys*100,"%");
sysinfo.mem[0]=0;
strcpy(sysinfo.mem,membuf);
return true;
}