sunstars
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Программа при первом запуске в реестре устанавливает текущую дату. При последующих запусках проверяет не истёк ли срок её работы. Первый раз программа отрабатывает нормально, а при последующих спотыкается на строке №33 CString s0 = r_t.Format("%A, %B %d, %Y") из-за некоректного указателя. Не могу понять почему. Код: #include <Windows.h> #include <stdio.h> #include <conio.h> #include <atltime.h> #include <atlstr.h> int main() { HKEY hKey; DWORD res; DWORD TYPE; printf("Demo \n"); if(RegCreateKeyEx(HKEY_CURRENT_USER, "SOFTWARE\\DEMO", 0, "", REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, &res)!=ERROR_SUCCESS) return 0; if (res == REG_CREATED_NEW_KEY) { CTime t; t = t.GetCurrentTime(); time_t t_t = t.GetTime(); RegSetValueEx(hKey,"",0,REG_DWORD,(CONST BYTE *) &t_t,4); printf("Base time have saved! \n"); } else { CTime t; time_t t_t,t_c; t = t.GetCurrentTime();//Возвращает текущей системной даты и времени в формате UTC. t_c = t.GetTime();//GetTime возвращает число секунд между текущим объектом CTime и 1-ое января 1970. res=5; RegQueryValueEx(hKey,"",0,&TYPE,(LPBYTE) &t_t,&res); CTime r_t(t_t); CString s0 = r_t.Format("%A, %B %d, %Y"); printf( "Base time is %s\n",s0 ); t_t = t_t >> 0xF; t_c = t_c >> 0xF; t_c -= t_t; printf ("%d Day left \n",20 - t_c); if (t_c<20) { printf("Working... \n\n"); } else { printf("Abort! \x7 \n\n"); } } RegCloseKey(hKey); _getch(); return 0; } | Добавлено: в строке №32 правим Код:и всё работает |