adsko Temat założony przez niniejszego użytkownika |
[WinApi] Wczytywanie danych z .ini » 2011-04-15 00:35:52 Witam, mam mały problem. Tym problemem jest wczytanie danych z .ini. Podczas naciśnięcia buttonu kompilator daje błąd i nie wiem o co chodzi;/
Oto fragment kodu:
if( wPar == 1 ) { if( b < 16 ) { kolin[ b ] =( PSTR ) VirtualAlloc(( LPVOID ) NULL,( DWORD )( 20 ), MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE ); int a = GetWindowText( kolim, kolin[ b ], 225 ); if( a == 0 ) MessageBox( HWND_DESKTOP, "Nic nie wpisałeś, wpisz jeszcze raz!", "Błąd", MB_OK ); else { SetWindowText( lok[ b ], kolin[ b ] ); b++; } } } if( wPar == 2 ) { sciezkaa =( PSTR ) VirtualAlloc(( LPVOID ) NULL,( DWORD )( 20 ), MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE ); int l = GetWindowText( yhyy, sciezkaa, 225 ); if( l == 0 ) MessageBox( hwpotomek, "Nie wpisałeś ścieżki do zapisu!", "Błąd", MB_OK ); else { string sc; sciezka = sciezkaa; sciezka = sciezka + "Adsko®"; CreateDirectory( sciezka.c_str(), 0 ); sciezka = sciezka + "\\sds.ini"; } for( int i = 0; i < 16; i++ ) { WritePrivateProfileString( "TEAM", o[ i ], kolin[ i ], sciezka.c_str() ); } } if( wPar == 3 ) { sciezkaa =( PSTR ) VirtualAlloc(( LPVOID ) NULL,( DWORD )( 20 ), MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE ); int l = GetWindowText( yhyy, sciezkaa, 225 ); if( l == 0 ) MessageBox( hwpotomek, "Nie wpisałeś ścieżki do odczytu!", "Błąd", MB_OK ); else { string sc; sciezka = sciezkaa; sciezka = sciezka + "Adsko®\\sds.ini"; for( int i = 0; i < 16; i++ ) { GetPrivateProfileString( "TEAM", o[ i ], "", kolin[ i ], sizeof( kolin[ i ] ), sciezka.c_str() ); SetWindowText( lok[ i ], kolin[ i ] ); } } }
zmienne:
LPCSTR o[20]={"1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16"}; <- dzięki niej nadaję dla sekcji klucz
LPSTR kolin[20]; <- przechowuje w niej wczytane dane
LPSTR sciezkaa <- łatwo się domyślić że dzięki niej uzyskuje ścieżkę do wczytania/zapisu pliku ini
HWND lok[20] <- Uchwyt do kontrolek tak samo jak zmienna yhyy |
|
McAffey |
» 2011-04-15 08:44:14 Pokaż jakie błędy wyrzuca (wstawiaj je w tagi log /log). |
|
DejaVu |
» 2011-04-15 12:08:43 On chyba nie mówi o błędach kompilacji tylko wystąpieniu błędu podczas działania aplikacji. Zapewne gdzieś masz NULL zamiast wskaźnika na dane i dlatego program się sypie. Druga opcja to wyjście poza zakres tablicy (np. wynikającej z zarezerwowania zbyt małej ilości pamięci na tablicę). |
|
adsko Temat założony przez niniejszego użytkownika |
» 2011-04-15 12:56:24 To gdzie ja tam mogę wyjść poza tablicę? Nawet jak ustwawiam wszystko na 0 bez pętli to mi błąd się nie zmienia:/
Czy to poprostu coś ze zmienną w której przechowuje te dane? Ponieważ na pierwszym obiegu pętli wywala mi error i to chyba właśnie z pamięcią. Jak chcecie mogę udostępnić cały kod ale jest on niezbyt czytelny według mnie:D A co do tablic to tablice większe niż potrzebuję więc ja już nie wiem:/ |
|
DejaVu |
» 2011-04-15 14:07:19 Czyli co?
WritePrivateProfileString( "TEAM", o[ i ], kolin[ i ], sciezka.c_str() );
Na tym się wywala? |
|
adsko Temat założony przez niniejszego użytkownika |
» 2011-04-15 14:20:09 Tak na tym, zaraz pokażę zdjęcie:
http://img27.imageshack.us/i/beztytuudks.png/
Ok znalazłem:D po prostu nie dałem:
kolin[ i ] =( PSTR ) VirtualAlloc(( LPVOID ) NULL,( DWORD )( 20 ), MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE );
i tu mam kolejne pytanie, może ktoś wytłumaczyć o co chodzi w tym?:D |
|
DejaVu |
» 2011-04-15 14:38:06 Jeżeli nie wiesz co robi ten kod to znaczy, że go skądś skopiowałeś (co już po pierwszym poście dało się zauważyć). Generalnie poszukaj opisu tej funkcji na MSDNie, a prawda zostanie Ci objawiona :) |
|
adsko Temat założony przez niniejszego użytkownika |
» 2011-04-15 14:40:44 Miałem inny problem, i jakoś znalazłem ten kod, a z samej budowy domyślam się że on rezerwuje pamięć:D |
|
« 1 » 2 |