Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Znikające dane z struktury

Ostatnio zmodyfikowano 2014-06-20 16:08
Autor Wiadomość
AssSoft
Temat założony przez niniejszego użytkownika
Znikające dane z struktury
» 2014-06-17 22:46:48
Witam, na wstępie dodam że NIGDY takiego błędu nie widziałem...

Mam taki o to kodzik:
C/C++
#include "WWall_mainhead.hpp"
#include "dll.h"
#include <windows.h>
#include <windowsx.h>
#include <ctime>
#include <string>
#include <sstream>
#define ID_hsettimup 1000
#define ID_hsettimdp 1001
#define ID_hstartp 1002
using namespace std;
const WORD ID1_TIMER = 1;
const WORD ID2_TIMER = 2;
lisplik LP[ 100000 ];
int LPn = - 1;
int LPna = 0;
int DayTim[ 7 ];
HDC hdc;
HWND hstartp;
HWND hsavep;
HWND hdayslis;
HWND hobrlis;
HWND hsettimdp;
HWND hsettimup;
HWND htimst;
HWND hobrftx;
bool someshit = false;
int daysCboxlastpoz = - 1;
int daysCboxactpoz = - 1;
LPSTR lpstr1;

/* This is where all the input to the window goes to */
LRESULT CALLBACK WndProc( HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam ) {
    switch( Message ) {
       
        /* Upon destruction, tell the main thread to stop */
    case WM_DESTROY: {
            PostQuitMessage( 0 );
            break;
        }
    case WM_TIMER:
        {
            WIN32_FIND_DATA Data;
            if( wParam == ID1_TIMER )
            {
                int obrtyp;
                daysCboxactpoz = ComboBox_GetCurSel( hdayslis );
                if( daysCboxactpoz != daysCboxlastpoz )
                {
                    DestroyWindow( hstartp );
                    DestroyWindow( hsettimup );
                    DestroyWindow( hsettimdp );
                    DestroyWindow( htimst );
                    LPn = - 1;
                    DestroyWindow( hobrlis );
                    daysCboxlastpoz = ComboBox_GetCurSel( hdayslis );
                    hobrlis = CreateWindowEx( WS_EX_CLIENTEDGE, "LISTBOX", NULL, WS_CHILD | WS_VISIBLE | WS_BORDER | CBS_DROPDOWNLIST,
                    155, 5, 250, 400, hwnd, NULL, GetModuleHandle( NULL ), NULL );
                    daysCboxlastpoz++;
                    HANDLE hjpg;
                    HANDLE hbmp;
                    switch( daysCboxlastpoz )
                    {
                    case 1:
                        {
                            hjpg = FindFirstFile( TEXT( "C:/programs/WindowsWall/OBR/1/*jpg" ), & Data );
                            hbmp = FindFirstFile( TEXT( "C:/programs/WindowsWall/OBR/1/*bmp" ), & Data );
                            if( FindFirstFile( TEXT( "C:/programs/WindowsWall/OBR/1/*.jpg" ), & Data ) == INVALID_HANDLE_VALUE )
                            {
                                if( FindFirstFile( TEXT( "C:/programs/WindowsWall/OBR/1/*.bmp" ), & Data ) == INVALID_HANDLE_VALUE )
                                {
                                    goto end;
                                }
                                else
                                {
                                    lpstr1 = "C:/programs/WindowsWall/OBR/1/";
                                    LPn++;
                                    LP[ LPn ].filetype = 0;
                                }
                            }
                            else
                            {
                                lpstr1 = "C:/programs/WindowsWall/OBR/1/";
                                LPn++;
                                LP[ LPn ].filetype = 1;
                            }
                        }
                        break;
                    case 2:
                        {
                            hjpg = FindFirstFile( TEXT( "C:/programs/WindowsWall/OBR/2/*jpg" ), & Data );
                            hbmp = FindFirstFile( TEXT( "C:/programs/WindowsWall/OBR/2/*bmp" ), & Data );
                            if( FindFirstFile( TEXT( "C:/programs/WindowsWall/OBR/2/*.jpg" ), & Data ) == INVALID_HANDLE_VALUE )
                            {
                                if( FindFirstFile( TEXT( "C:/programs/WindowsWall/OBR/2/*.bmp" ), & Data ) == INVALID_HANDLE_VALUE )
                                {
                                    goto end;
                                }
                                else
                                {
                                    lpstr1 = "C:/programs/WindowsWall/OBR/2/";
                                    LPn++;
                                    LP[ LPn ].filetype = 0;
                                }
                            }
                            else
                            {
                                lpstr1 = "C:/programs/WindowsWall/OBR/2/";
                                LPn++;
                                LP[ LPn ].filetype = 1;
                            }
                        }
                        break;
                    case 3:
                        {
                            hjpg = FindFirstFile( TEXT( "C:/programs/WindowsWall/OBR/3/*jpg" ), & Data );
                            hbmp = FindFirstFile( TEXT( "C:/programs/WindowsWall/OBR/3/*bmp" ), & Data );
                            if( FindFirstFile( TEXT( "C:/programs/WindowsWall/OBR/3/*.jpg" ), & Data ) == INVALID_HANDLE_VALUE )
                            {
                                if( FindFirstFile( TEXT( "C:/programs/WindowsWall/OBR/3/*.bmp" ), & Data ) == INVALID_HANDLE_VALUE )
                                {
                                    goto end;
                                }
                                else
                                {
                                    lpstr1 = "C:/programs/WindowsWall/OBR/3/";
                                    LPn++;
                                    LP[ LPn ].filetype = 0;
                                }
                            }
                            else
                            {
                                lpstr1 = "C:/programs/WindowsWall/OBR/3/";
                                LPn++;
                                LP[ LPn ].filetype = 1;
                            }
                        }
                        break;
                    case 4:
                        {
                            hjpg = FindFirstFile( TEXT( "C:/programs/WindowsWall/OBR/4/*jpg" ), & Data );
                            hbmp = FindFirstFile( TEXT( "C:/programs/WindowsWall/OBR/4/*bmp" ), & Data );
                            if( FindFirstFile( TEXT( "C:/programs/WindowsWall/OBR/4/*.jpg" ), & Data ) == INVALID_HANDLE_VALUE )
                            {
                                if( FindFirstFile( TEXT( "C:/programs/WindowsWall/OBR/4/*.bmp" ), & Data ) == INVALID_HANDLE_VALUE )
                                {
                                    goto end;
                                }
                                else
                                {
                                    lpstr1 = "C:/programs/WindowsWall/OBR/4/";
                                    LPn++;
                                    LP[ LPn ].filetype = 0;
                                }
                            }
                            else
                            {
                                lpstr1 = "C:/programs/WindowsWall/OBR/4/";
                                LPn++;
                                LP[ LPn ].filetype = 1;
                            }
                        }
                        break;
                    case 5:
                        {
                            hjpg = FindFirstFile( TEXT( "C:/programs/WindowsWall/OBR/5/*jpg" ), & Data );
                            hbmp = FindFirstFile( TEXT( "C:/programs/WindowsWall/OBR/5/*bmp" ), & Data );
                            if( FindFirstFile( TEXT( "C:/programs/WindowsWall/OBR/5/*.jpg" ), & Data ) == INVALID_HANDLE_VALUE )
                            {
                                if( FindFirstFile( TEXT( "C:/programs/WindowsWall/OBR/5/*.bmp" ), & Data ) == INVALID_HANDLE_VALUE )
                                {
                                    goto end;
                                }
                                else
                                {
                                    lpstr1 = "C:/programs/WindowsWall/OBR/5/";
                                    LPn++;
                                    LP[ LPn ].filetype = 0;
                                }
                            }
                            else
                            {
                                lpstr1 = "C:/programs/WindowsWall/OBR/5/";
                                LPn++;
                                LP[ LPn ].filetype = 1;
                            }
                        }
                        break;
                    case 6:
                        {
                            hjpg = FindFirstFile( TEXT( "C:/programs/WindowsWall/OBR/6/*jpg" ), & Data );
                            hbmp = FindFirstFile( TEXT( "C:/programs/WindowsWall/OBR/6/*bmp" ), & Data );
                            if( FindFirstFile( TEXT( "C:/programs/WindowsWall/OBR/6/*.jpg" ), & Data ) == INVALID_HANDLE_VALUE )
                            {
                                if( FindFirstFile( TEXT( "C:/programs/WindowsWall/OBR/6/*.bmp" ), & Data ) == INVALID_HANDLE_VALUE )
                                {
                                    goto end;
                                }
                                else
                                {
                                    lpstr1 = "C:/programs/WindowsWall/OBR/6/";
                                    LPn++;
                                    LP[ LPn ].filetype = 0;
                                }
                            }
                            else
                            {
                                lpstr1 = "C:/programs/WindowsWall/OBR/6/";
                                LPn++;
                                LP[ LPn ].filetype = 1;
                            }
                        }
                        break;
                    case 7:
                        {
                            hjpg = FindFirstFile( TEXT( "C:/programs/WindowsWall/OBR/7/*jpg" ), & Data );
                            hbmp = FindFirstFile( TEXT( "C:/programs/WindowsWall/OBR/7/*bmp" ), & Data );
                            if( FindFirstFile( TEXT( "C:/programs/WindowsWall/OBR/7/*.jpg" ), & Data ) == INVALID_HANDLE_VALUE )
                            {
                                if( FindFirstFile( TEXT( "C:/programs/WindowsWall/OBR/7/*.bmp" ), & Data ) == INVALID_HANDLE_VALUE )
                                {
                                    goto end;
                                }
                                else
                                {
                                    lpstr1 = "C:/programs/WindowsWall/OBR/7/";
                                    LPn++;
                                    LP[ LPn ].filetype = 0;
                                }
                            }
                            else
                            {
                                lpstr1 = "C:/programs/WindowsWall/OBR/7/";
                                LPn++;
                                LP[ LPn ].filetype = 1;
                            }
                        }
                        break;
                    }
                    LP[ LPn ].daynum = daysCboxlastpoz;
                    LP[ LPn ].filename = Data.cFileName;
                    LPn++;
                    SendMessage( hobrlis, LB_ADDSTRING, 0,( LPARAM ) LP[ LPn - 1 ].filename );
                    while( FindNextFile( hbmp, & Data ) )
                    {
                        LP[ LPn ].filetype = 0;
                        LP[ LPn ].daynum = daysCboxlastpoz;
                        LP[ LPn ].filename = Data.cFileName;
                        LPn++;
                        SendMessage( hobrlis, LB_ADDSTRING, 0,( LPARAM ) LP[ LPn - 1 ].filename );
                    }
                    FindClose( hbmp );
                    while( FindNextFile( hjpg, & Data ) )
                    {
                        LP[ LPn ].filetype = 1;
                        LP[ LPn ].daynum = daysCboxlastpoz;
                        LP[ LPn ].filename = Data.cFileName;
                        SendMessage( hobrlis, LB_ADDSTRING, 0,( LPARAM ) LP[ LPn - 1 ].filename );
                        LPn++;
                    }
                    FindClose( hjpg );
                    hstartp = CreateWindowEx( 0, "BUTTON", "Start", WS_CHILD | WS_VISIBLE, 480, 1, 50, 50, hwnd,( HMENU ) ID_hstartp, GetModuleHandle( NULL ), NULL );
                    hsettimup = CreateWindowEx( 0, "BUTTON", "+", WS_CHILD | WS_VISIBLE, 455, 1, 25, 25, hwnd,( HMENU ) ID_hsettimup, GetModuleHandle( NULL ), NULL );
                    hsettimdp = CreateWindowEx( 0, "BUTTON", "-", WS_CHILD | WS_VISIBLE, 455, 26, 25, 25, hwnd,( HMENU ) ID_hsettimdp, GetModuleHandle( NULL ), NULL );
                    htimst = CreateWindowEx( 0, "STATIC", NULL, WS_CHILD | WS_VISIBLE | SS_LEFT, 405, 1, 50, 50, hwnd, NULL, GetModuleHandle( NULL ), NULL );
                    DayTim[ daysCboxlastpoz - 1 ] = 10;
                    someshit = true;
                    end:;
                    string buf;
                    ostringstream ss;
                    if( someshit == false )
                    {
                        goto tend;
                    }
                    someshit = false;
                    ss << DayTim[ daysCboxlastpoz - 1 ];
                    buf = ss.str();
                    SetWindowText( htimst, buf.c_str() );
                    tend:;
                    daysCboxlastpoz--;
                }
            }
            if( wParam == ID2_TIMER )
            {
                LPSTR linklp = lpstr1;
                strcat( linklp, LP[ LPna ].filename );
                SystemParametersInfo( SPI_SETDESKWALLPAPER, 0,( PVOID ) linklp, SPIF_UPDATEINIFILE );
                LPna++;
                if( LPna > LPn - 1 )
                {
                    LPna = 0;
                }
            }
            break;
        }
    case WM_COMMAND:
        {
            switch( wParam )
            {
            case ID_hsettimup:
                {
                    DayTim[ daysCboxlastpoz ] ++;
                    string buf;
                    ostringstream ss;
                    ss << DayTim[ daysCboxlastpoz ];
                    buf = ss.str();
                    SetWindowText( htimst, buf.c_str() );
                }
                break;
            case ID_hsettimdp:
                {
                    DayTim[ daysCboxlastpoz ] --;
                    string buf;
                    ostringstream ss;
                    ss << DayTim[ daysCboxlastpoz ];
                    buf = ss.str();
                    SetWindowText( htimst, buf.c_str() );
                }
                break;
            case ID_hstartp:
                {
                    LPna = 0;
                    if( SetTimer( hwnd, ID2_TIMER, DayTim[ daysCboxlastpoz ] * 1000, NULL ) == 0 )
                         MessageBox( hwnd, "Nie można utworzyć timera!", "Error", MB_ICONSTOP );
                   
                    LPSTR linklp = lpstr1;
                    // CRASH strcat ( linklp, LP[LPna].filename );                                                          // Crash
                    SystemParametersInfo( SPI_SETDESKWALLPAPER, 0,( PVOID ) linklp, SPIF_UPDATEINIFILE );
                    MessageBox( hwnd, LP[ LPna ].filename, "Wygrałeś wiadro internetu...", MB_ICONSTOP );
                    LPna++;
                    if( LPna > LPn - 1 )
                    {
                        LPna = 0;
                    }
                }
                break;
            }
            break;
        }
       
        /* All other messages (a lot of them) are processed using default procedures */
        default:
        return DefWindowProc( hwnd, Message, wParam, lParam );
    }
    return 0;
}

/* The 'main' function of Win32 GUI programs: this is where execution starts */
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) {
    WNDCLASSEX wc; /* A properties struct of our window */
    HWND hwnd; /* A 'HANDLE', hence the H, or a pointer to our window */
    MSG Msg; /* A temporary location for all messages */
   
    /* zero out the struct and set the stuff we want to modify */
    memset( & wc, 0, sizeof( wc ) );
    wc.cbSize = sizeof( WNDCLASSEX );
    wc.lpfnWndProc = WndProc; /* This is where we will send messages to */
    wc.hInstance = hInstance;
    wc.hCursor = LoadCursor( NULL, IDC_ARROW );
   
    /* White, COLOR_WINDOW is just a #define for a system color, try Ctrl+Clicking it */
    wc.hbrBackground =( HBRUSH )( COLOR_WINDOW + 1 );
    wc.lpszClassName = "WindowClass";
    wc.hIcon = LoadIcon( NULL, IDI_APPLICATION ); /* Load a standard icon */
    wc.hIconSm = LoadIcon( NULL, IDI_APPLICATION ); /* use the name "A" to use the project icon */
    if( !RegisterClassEx( & wc ) ) {
        MessageBox( NULL, "Window Registration Failed!", "Error!", MB_ICONEXCLAMATION | MB_OK );
        return 0;
    }
    hwnd = CreateWindowEx( WS_EX_CLIENTEDGE, "WindowClass", "WindowsWall", WS_VISIBLE | WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT, /* x */
    CW_USEDEFAULT, /* y */
    1000, /* width */
    500, /* height */
    NULL, NULL, hInstance, NULL );
    if( hwnd == NULL ) {
        MessageBox( NULL, "Window Creation Failed!", "Error!", MB_ICONEXCLAMATION | MB_OK );
        return 0;
    }
    hdayslis = CreateWindowEx( WS_EX_CLIENTEDGE, "COMBOBOX", NULL, WS_CHILD | WS_VISIBLE | WS_BORDER | CBS_DROPDOWNLIST,
    5, 5, 150, 200, hwnd, NULL, hInstance, NULL );
    SendMessage( hdayslis, CB_ADDSTRING, 0,( LPARAM ) "Poniedziałek" );
    SendMessage( hdayslis, CB_ADDSTRING, 0,( LPARAM ) "Wtorek" );
    SendMessage( hdayslis, CB_ADDSTRING, 0,( LPARAM ) "Środa" );
    SendMessage( hdayslis, CB_ADDSTRING, 0,( LPARAM ) "Czwartek" );
    SendMessage( hdayslis, CB_ADDSTRING, 0,( LPARAM ) "Piątek" );
    SendMessage( hdayslis, CB_ADDSTRING, 0,( LPARAM ) "Sobota" );
    SendMessage( hdayslis, CB_ADDSTRING, 0,( LPARAM ) "Niedziela" );
    WIN32_FIND_DATA DATA;
    bool allfilesready = CheckFiles();
    if( allfilesready == false )
    {
        MessageBox( NULL, "Błąd krytyczny, brak możliwości kontynuowania pracy programu. Zalecana reinstalacja", "Error!", MB_ICONEXCLAMATION | MB_OK );
        waitsec( 3 );
        PostQuitMessage( 0 );
    }
    /*
    This is the heart of our program where all input is processed and
    sent to WndProc. Note that GetMessage blocks code flow until it receives something, so
    this loop will not produce unreasonably high CPU usage
    */
    if( SetTimer( hwnd, ID1_TIMER, 100, NULL ) == 0 )
         MessageBox( hwnd, "Nie można utworzyć timera!", "Error", MB_ICONSTOP );
   
    while( GetMessage( & Msg, NULL, 0, 0 ) > 0 ) { /* If no error is received... */
        TranslateMessage( & Msg ); /* Translate key codes to chars if present */
        DispatchMessage( & Msg ); /* Send it to WndProc */
    }
    return Msg.wParam;
}
(tak, wiem że zrobienie ponad 100 linii kodu dla jednej cyferki to strata czasu, gdybym miał to robić drugi raz to zrobiłbym to zupełnie inaczej.)
i taką oto strukturę umieszczoną w DLL:
C/C++
struct lisplik
{
    int daynum;
    LPSTR filename;
    int filetype; // 0 - bmp; 1 - jpg
};


W momencie dojścia do strcat następuje crash. ( oznaczyłem w kodzie komentarzem )
Dodam że próbowałem wielu metod, dopiero na koniec użyłem strcat... Po kilku testach okazało się że LP[LPna].filename jest... puste. Po sprawdzeniu dokładnie tej samej zmiennej (?) w miejscu nadawania jej wartości wszystko działało.

Wyczerpałem wszystkie pomysły i sposoby... Prosiłbym o szybką pomoc.
Wiele razy stosowałem w ten sposób strukturę, nigdy czegoś takiego nie widziałem.
P-112207
maly
» 2014-06-18 07:14:57
LP[ LPn ].filename = Data.cFileName;
 to nie działa tak jak myślisz.

wiem że zrobienie ponad 100 linii kodu dla jednej cyferki to strata czasu
gdybym miał to robić drugi raz to zrobiłbym to zupełnie inaczej
Wyczerpałem wszystkie pomysły i sposoby
Acha.

Już w poprzednim temacie pisałem, mając tak dużo chaotycznego kodu aż się prosisz o błędy i co najdziwniejsze prosisz innych żeby znaleźli je za Ciebie.
P-112214
AssSoft
Temat założony przez niniejszego użytkownika
» 2014-06-19 19:28:23
A konkretniej?
Usunąłem całkowicie switch case, zrobiłem to od nowa i dalej na jedno wychodzi...
Nie wiem, możliwe że błąd jest oczywisty, ale jak dla mnie nie ma sensu - Co może tu działać inaczej?
P-112339
pekfos
» 2014-06-19 22:31:56
Co może tu działać inaczej?
Gdzie?
LP[ LPn ].filename = Data.cFileName;
 to nie działa tak jak myślisz.
..tu? Kopiujesz tylko wskaźnik, a nie rzeczywiste dane, które zaraz potem mogą zostać usunięte, lub się zmienić.
P-112345
AssSoft
Temat założony przez niniejszego użytkownika
» 2014-06-20 13:26:11
Hmm... Wiesz może jak to zmienić? Oczywiście pracuje nad tym, ale nie widzę rozwiązania.

C/C++
#include "WWall_mainhead.hpp"
#include "dll.h"
#include <windows.h>
#include <windowsx.h>
#include <ctime>
#include <string>
#include <sstream>
#define ID_hsettimup 1000
#define ID_hsettimdp 1001
#define ID_hstartp 1002
using namespace std;
const WORD ID1_TIMER = 1;
const WORD ID2_TIMER = 2;
lisplik LP[ 100000 ];
int LPn = - 1;
int LPna = 0;
int DayTim[ 7 ];
string link;
HDC hdc;
HWND hstartp;
HWND hsavep;
HWND hdayslis;
HWND hobrlis;
HWND hsettimdp;
HWND hsettimup;
HWND htimst;
HWND hobrftx;
bool someshit = false;
int daysCboxlastpoz = - 1;
int daysCboxactpoz = - 1;
LPSTR lpstr1;

/* This is where all the input to the window goes to */
LRESULT CALLBACK WndProc( HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam ) {
    switch( Message ) {
       
        /* Upon destruction, tell the main thread to stop */
    case WM_DESTROY: {
            PostQuitMessage( 0 );
            break;
        }
    case WM_TIMER:
        {
            WIN32_FIND_DATA Data;
            if( wParam == ID1_TIMER )
            {
                int obrtyp;
                daysCboxactpoz = ComboBox_GetCurSel( hdayslis );
                LPSTR lpfilename;
                if( daysCboxactpoz != daysCboxlastpoz )
                {
                    DestroyWindow( hstartp );
                    DestroyWindow( hsettimup );
                    DestroyWindow( hsettimdp );
                    DestroyWindow( htimst );
                    LPn = - 1;
                    DestroyWindow( hobrlis );
                    daysCboxlastpoz = ComboBox_GetCurSel( hdayslis );
                    hobrlis = CreateWindowEx( WS_EX_CLIENTEDGE, "LISTBOX", NULL, WS_CHILD | WS_VISIBLE | WS_BORDER | CBS_DROPDOWNLIST,
                    155, 5, 250, 400, hwnd, NULL, GetModuleHandle( NULL ), NULL );
                    daysCboxlastpoz++;
                    HANDLE hjpg;
                    HANDLE hbmp;
                    ostringstream oss1;
                    oss1 << "C:/programs/WindowsWall/OBR/" << daysCboxlastpoz << "/*jpg";
                    string linktoJPG = oss1.str();
                    ostringstream oss2;
                    oss2 << "C:/programs/WindowsWall/OBR/" << daysCboxlastpoz << "/*bmp";
                    string linktoBMP = oss2.str();
                    ostringstream oss3;
                    oss3 << "C:/programs/WindowsWall/OBR/" << daysCboxlastpoz << "/";
                    link = oss3.str();
                    hjpg = FindFirstFile( STRtoLPS( linktoJPG ), & Data );
                    hbmp = FindFirstFile( STRtoLPS( linktoBMP ), & Data );
                    if( FindFirstFile( STRtoLPS( linktoJPG ), & Data ) == INVALID_HANDLE_VALUE )
                    {
                        if( FindFirstFile( STRtoLPS( linktoBMP ), & Data ) == INVALID_HANDLE_VALUE )
                        {
                            goto end;
                        }
                        else
                        {
                            LPn++;
                            LP[ LPn ].filetype = 0;
                        }
                    }
                    else
                    {
                        LPn++;
                        LP[ LPn ].filetype = 1;
                    }
                    LP[ LPn ].daynum = daysCboxlastpoz;
                    lpfilename = Data.cFileName;
                    LP[ LPn ].filename = lpfilename;
                    SendMessage( hobrlis, LB_ADDSTRING, 0,( LPARAM ) LP[ LPn ].filename );
                    LPn++;
                    while( FindNextFile( hbmp, & Data ) )
                    {
                        LP[ LPn ].filetype = 0;
                        LP[ LPn ].daynum = daysCboxlastpoz;
                        lpfilename = Data.cFileName;
                        LP[ LPn ].filename = lpfilename;
                        SendMessage( hobrlis, LB_ADDSTRING, 0,( LPARAM ) LP[ LPn ].filename );
                        LPn++;
                    }
                    FindClose( hbmp );
                    while( FindNextFile( hjpg, & Data ) )
                    {
                        LP[ LPn ].filetype = 1;
                        LP[ LPn ].daynum = daysCboxlastpoz;
                        lpfilename = Data.cFileName;
                        LP[ LPn ].filename = lpfilename;
                        SendMessage( hobrlis, LB_ADDSTRING, 0,( LPARAM ) LP[ LPn ].filename );
                        LPn++;
                    }
                    FindClose( hjpg );
                    hstartp = CreateWindowEx( 0, "BUTTON", "Start", WS_CHILD | WS_VISIBLE, 480, 1, 50, 50, hwnd,( HMENU ) ID_hstartp, GetModuleHandle( NULL ), NULL );
                    hsettimup = CreateWindowEx( 0, "BUTTON", "+", WS_CHILD | WS_VISIBLE, 455, 1, 25, 25, hwnd,( HMENU ) ID_hsettimup, GetModuleHandle( NULL ), NULL );
                    hsettimdp = CreateWindowEx( 0, "BUTTON", "-", WS_CHILD | WS_VISIBLE, 455, 26, 25, 25, hwnd,( HMENU ) ID_hsettimdp, GetModuleHandle( NULL ), NULL );
                    htimst = CreateWindowEx( 0, "STATIC", NULL, WS_CHILD | WS_VISIBLE | SS_LEFT, 405, 1, 50, 50, hwnd, NULL, GetModuleHandle( NULL ), NULL );
                    DayTim[ daysCboxlastpoz - 1 ] = 10;
                    someshit = true;
                    end:;
                    string buf;
                    ostringstream ss;
                    if( someshit == false )
                    {
                        goto tend;
                    }
                    someshit = false;
                    ss << DayTim[ daysCboxlastpoz - 1 ];
                    buf = ss.str();
                    SetWindowText( htimst, buf.c_str() );
                    tend:;
                    daysCboxlastpoz--;
                }
            }
            if( wParam == ID2_TIMER )
            {
                link += LPStoSTR( LP[ LPna ].filename );
                LPSTR linklp = STRtoLPS( link );
                MessageBox( hwnd, linklp, "KABOOOM", MB_ICONSTOP );
                SystemParametersInfo( SPI_SETDESKWALLPAPER, 0,( PVOID ) linklp, SPIF_UPDATEINIFILE );
                LPna++;
                if( LPna > LPn )
                {
                    LPna = 0;
                }
            }
            break;
        }
    case WM_COMMAND:
        {
            switch( wParam )
            {
            case ID_hsettimup:
                {
                    DayTim[ daysCboxlastpoz ] ++;
                    string buf;
                    ostringstream ss;
                    ss << DayTim[ daysCboxlastpoz ];
                    buf = ss.str();
                    SetWindowText( htimst, buf.c_str() );
                }
                break;
            case ID_hsettimdp:
                {
                    DayTim[ daysCboxlastpoz ] --;
                    string buf;
                    ostringstream ss;
                    ss << DayTim[ daysCboxlastpoz ];
                    buf = ss.str();
                    SetWindowText( htimst, buf.c_str() );
                }
                break;
            case ID_hstartp:
                {
                    LPna = 0;
                    if( SetTimer( hwnd, ID2_TIMER, DayTim[ daysCboxlastpoz ] * 1000, NULL ) == 0 )
                         MessageBox( hwnd, "Nie można utworzyć timera!", "Error", MB_ICONSTOP );
                   
                }
                break;
            }
            break;
        }
       
        /* All other messages (a lot of them) are processed using default procedures */
        default:
        return DefWindowProc( hwnd, Message, wParam, lParam );
    }
    return 0;
}

/* The 'main' function of Win32 GUI programs: this is where execution starts */
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) {
    WNDCLASSEX wc; /* A properties struct of our window */
    HWND hwnd; /* A 'HANDLE', hence the H, or a pointer to our window */
    MSG Msg; /* A temporary location for all messages */
   
    /* zero out the struct and set the stuff we want to modify */
    memset( & wc, 0, sizeof( wc ) );
    wc.cbSize = sizeof( WNDCLASSEX );
    wc.lpfnWndProc = WndProc; /* This is where we will send messages to */
    wc.hInstance = hInstance;
    wc.hCursor = LoadCursor( NULL, IDC_ARROW );
   
    /* White, COLOR_WINDOW is just a #define for a system color, try Ctrl+Clicking it */
    wc.hbrBackground =( HBRUSH )( COLOR_WINDOW + 1 );
    wc.lpszClassName = "WindowClass";
    wc.hIcon = LoadIcon( NULL, IDI_APPLICATION ); /* Load a standard icon */
    wc.hIconSm = LoadIcon( NULL, IDI_APPLICATION ); /* use the name "A" to use the project icon */
    if( !RegisterClassEx( & wc ) ) {
        MessageBox( NULL, "Window Registration Failed!", "Error!", MB_ICONEXCLAMATION | MB_OK );
        return 0;
    }
    hwnd = CreateWindowEx( WS_EX_CLIENTEDGE, "WindowClass", "WindowsWall", WS_VISIBLE | WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT, /* x */
    CW_USEDEFAULT, /* y */
    1000, /* width */
    500, /* height */
    NULL, NULL, hInstance, NULL );
    if( hwnd == NULL ) {
        MessageBox( NULL, "Window Creation Failed!", "Error!", MB_ICONEXCLAMATION | MB_OK );
        return 0;
    }
    hdayslis = CreateWindowEx( WS_EX_CLIENTEDGE, "COMBOBOX", NULL, WS_CHILD | WS_VISIBLE | WS_BORDER | CBS_DROPDOWNLIST,
    5, 5, 150, 200, hwnd, NULL, hInstance, NULL );
    SendMessage( hdayslis, CB_ADDSTRING, 0,( LPARAM ) "Poniedziałek" );
    SendMessage( hdayslis, CB_ADDSTRING, 0,( LPARAM ) "Wtorek" );
    SendMessage( hdayslis, CB_ADDSTRING, 0,( LPARAM ) "Środa" );
    SendMessage( hdayslis, CB_ADDSTRING, 0,( LPARAM ) "Czwartek" );
    SendMessage( hdayslis, CB_ADDSTRING, 0,( LPARAM ) "Piątek" );
    SendMessage( hdayslis, CB_ADDSTRING, 0,( LPARAM ) "Sobota" );
    SendMessage( hdayslis, CB_ADDSTRING, 0,( LPARAM ) "Niedziela" );
    WIN32_FIND_DATA DATA;
    bool allfilesready = CheckFiles();
    if( allfilesready == false )
    {
        MessageBox( NULL, "Błąd krytyczny, brak możliwości kontynuowania pracy programu. Zalecana reinstalacja", "Error!", MB_ICONEXCLAMATION | MB_OK );
        waitsec( 3 );
        PostQuitMessage( 0 );
    }
    /*
    This is the heart of our program where all input is processed and
    sent to WndProc. Note that GetMessage blocks code flow until it receives something, so
    this loop will not produce unreasonably high CPU usage
    */
    if( SetTimer( hwnd, ID1_TIMER, 100, NULL ) == 0 )
         MessageBox( hwnd, "Nie można utworzyć timera!", "Error", MB_ICONSTOP );
   
    while( GetMessage( & Msg, NULL, 0, 0 ) > 0 ) { /* If no error is received... */
        TranslateMessage( & Msg ); /* Translate key codes to chars if present */
        DispatchMessage( & Msg ); /* Send it to WndProc */
    }
    return Msg.wParam;
}

Program przestaje się sypać, ale dalej nie jest to zamierzony efekt.
P-112371
maly
» 2014-06-20 14:42:24
Może poprostu zamiast LPSTR użyj std::string?
C/C++
struct lisplik
{
    int daynum;
    std::string filename;
    //LPSTR filename;
    int filetype; // 0 - bmp; 1 - jpg
};
P-112376
AssSoft
Temat założony przez niniejszego użytkownika
» 2014-06-20 16:08:06
Działa. Dzięki... W tym momencie dopiero zrozumiałem w czym był problem.
Na przyszłość warto zapamiętać.
P-112386
« 1 »
  Strona 1 z 1