Я использую этот код для получения версии Windows:
#define BUFSIZE 256
bool config::GetOS(LPTSTR OSv)
{
OSVERSIONINFOEX osve;
BOOL bOsVersionInfoEx;
ZeroMemory(&osve, sizeof(OSVERSIONINFOEX));
osve.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
if( !(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osve)) )
return false;
TCHAR buf[BUFSIZE];
StringCchPrintf(buf, BUFSIZE, TEXT("%u.%u.%u.%u"),
osve.dwPlatformId,
osve.dwMajorVersion,
osve.dwMinorVersion,
osve.dwBuildNumber);
StringCchCat(OSv, BUFSIZE, buf);
return true;
}
И я проверяю это с:
LPTSTR OSv= new TCHAR[BUFSIZE];
config c;
c.GetOS(OSv);
MessageBox(OSv, 0, 0);
И в msgbox я получаю что-то вроде этого 5.1.1.20 (где 5.1.20 = для OSv), но первые 2 или 3 символа являются странными символами, о которых я не знаю, когда они появились. Даже более странно, если я вызову этот второй фрагмент снова, он покажет, что все в порядке, он покажет странные символы только при первом выполнении.
У кого-то есть идея, что здесь происходит?