Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.01.2017, 18:56   #1
StillPhelix
Пользователь
 
Регистрация: 18.05.2014
Сообщений: 35
По умолчанию Защита программы льготным периодом работы

Программа при первом запуске в реестре устанавливает текущую дату. При последующих запусках проверяет не истёк ли срок её работы. Первый раз программа отрабатывает нормально, а при последующих спотыкается на строке №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;
}
StillPhelix вне форума Ответить с цитированием
Старый 17.01.2017, 20:06   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

а) Записываете 4 байта, читаете 5
б) Format требуются всякие дополнительные параметры
в) %A, %B, %Y - это что?
г) Не каждый CString объект можно передавать в качестве параметра для printf.
waleri вне форума Ответить с цитированием
Старый 17.01.2017, 20:29   #3
StillPhelix
Пользователь
 
Регистрация: 18.05.2014
Сообщений: 35
По умолчанию

Цитата:
а) Записываете 4 байта, читаете 5
Объект CTime будет занимать в памяти в данном случае 28 байт
Цитата:
б) Format требуются всякие дополнительные параметры
Какие?
Цитата:
в) %A, %B, %Y - это что?
Параметры Format: неделя, месяц, число, год
Цитата:
г) Не каждый CString объект можно передавать в качестве параметра для printf.
Ошибка пока возникает при исполнении Format
StillPhelix вне форума Ответить с цитированием
Старый 17.01.2017, 21:10   #4
StillPhelix
Пользователь
 
Регистрация: 18.05.2014
Сообщений: 35
По умолчанию

в строке №32 правим
Код:
CTime r_t(t_c);
и всё работает
StillPhelix вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Защита программы Legeardo Общие вопросы Delphi 5 26.11.2016 00:12
Защита программы от НСД. Защита путем шифрования части программы на флеш-диске или флешке. Alina300788 Помощь студентам 9 10.06.2014 19:21
Защита программы sistemsx Общие вопросы Delphi 10 22.05.2013 10:08
Защита программы Владимир 2012 Общие вопросы по Java, Java SE, Kotlin 0 30.11.2012 01:41
Нажатие вниз+энтер с небольшим периодом. Greed74 Софт 1 24.11.2010 09:59