Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Защита программы льготным периодом работы


Автор: StillPhelix 17.1.2017, 18:53
Программа при первом запуске в реестре устанавливает текущую дату. При последующих запусках проверяет не истёк ли срок её работы. Первый раз программа отрабатывает нормально, а при последующих спотыкается на строке №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.1.2017, 21:14
в строке №32 правим
Код

CTime r_t(t_c);
и всё работает

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)