Problem z funkcją GetOpenFileName (Tryb Release błąd , tryb Debug bez problemów)
Ostatnio zmodyfikowano 2014-01-05 12:48
domin568 Temat założony przez niniejszego użytkownika |
Problem z funkcją GetOpenFileName (Tryb Release błąd , tryb Debug bez problemów) » 2014-01-04 11:27:29 Witam, skończyłem pisać moją mp3, chce ją teraz udostępnić, podpiąłem wszystkie liby dla wersji Release, wszystko się ładnie kompiluje, jednak kiedy klikam przycisk odpowiedzialny za wybranie piosenki, otwiera się okno Eksploratora Windows aby wybrać plik, po wybraniu pliku okno ponownie się ukazuje aby wybrać piosenkę, jednak nie mam żadnej złej pętli. W trybie debug nie ma najmniejszych problemów. Kod : bool otworzPlik() { OPENFILENAME ofn; char szFile[ 1024 ]; HANDLE hf; ZeroMemory( & ofn, sizeof( ofn ) ); ofn.lStructSize = sizeof( ofn ); ofn.hwndOwner = hwnd; ofn.lpstrFile = szFile; ofn.lpstrFile[ 0 ] = '\0'; ofn.nMaxFile = sizeof( szFile ); ofn.lpstrFilter = "Pliki Mp3\0*.MP3\0"; ofn.nFilterIndex = 1; ofn.lpstrFileTitle = NULL; ofn.nMaxFileTitle = 0; ofn.lpstrInitialDir = NULL; ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST; GetOpenFileName( & ofn ); string sciezka = szFile; if( sciezka.length() > 2 ) { if( !music.OpenFromFile( sciezka ) ) { MessageBoxA( NULL, "Nie udało się odtworzyć pliku", "Błąd", MB_ICONEXCLAMATION | MB_OK ); return false; } else { return true; } } return false; }
Wywołanie tej funkcji : while( okno.isOpen() ) { while( okno.pollEvent( zdarzenie ) ) { if( browse.inRectangle( posMouse ) == true && browse.isMouseKeyDown( zdarzenie ) == true ) { if( otworzPlik() == true ) { dlugoscPiosenki = music.getLength(); wspolczynnikSuwak = suwakPiosenki.obliczWspolczynnik( dlugoscPiosenki ); music.play(); } } } }
Tutaj funkcje odpowiadające za działanie przycisku bool Przycisk::inRectangle( sf::Vector2f pozycja_myszki ) { if( sprite.getGlobalBounds().contains( pozycja_myszki ) == true ) { return true; } } bool Przycisk::isMouseKeyDown( sf::Event & zdarzenie ) { if( zdarzenie.type == sf::Event::MouseButtonPressed ) { return true; } }
Czytałem pewien artykuł że w trybie Release kod jest kompilowany odrobinkę inaczej, niezainicjalizowanie zmiennej może zrobić duże kłopoty, ale w moim przypadku każdą zmienną inicjalizuje. Proszę o pomoc :) |
|
pekfos |
» 2014-01-04 12:03:42 Metoda Przycisk::isMouseKeyDown() ma niezdefiniowane zachowanie, jeśli warunek się nie spełni. To samo w Przycisk::inRectangle(). |
|
domin568 Temat założony przez niniejszego użytkownika |
» 2014-01-05 10:42:01 Dzięki działa, dosyć głupi błąd ;/ czyli jak się zachowuje funkcja która nie ma zdefiniowanego return ? no bo moim zdaniem to taka funkcja powinna sprawdzić czy warunek jest prawdziwy, a jeżeli nie to nic nie robić. Jak można to zdefiniować ? |
|
pekfos |
» 2014-01-05 12:48:35 a jeżeli nie to nic nie robić. |
Nie może nic nie robić. Funkcja w każdym przypadku musi zwracać wartość. Poprawny kod wygląda tak: bool Przycisk::inRectangle( sf::Vector2f pozycja_myszki ) { return sprite.getGlobalBounds().contains( pozycja_myszki ); } |
|
« 1 » |