• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

[SFML/FTP/C++] Crash przy uruchamianiu programu w trybie release

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
+1 głos
664 wizyt
pytanie zadane 26 lipca 2016 w C i C++ przez JAKUBW Nałogowiec (33,470 p.)
edycja 13 października 2016 przez JAKUBW

Witam,

tworzę gre w której będę miał muzykę. Problem w tym, że muzyka waży 9MB (.ogg)  a to trochę dużo jak na małą gierkę i wrzucając tą muzykę do instalatora trochę będzie to warzyć a wolałbym, aby instalator był mały a gra sobie pobierze resztę w trakcie. A więc wziąłem się do roboty, a że zaczynam dopiero przygodę z SFML to robiłem mniej więcej według przykładów znalezionych w internecie.

Wyszło coś takiego:

#include <SFML/Network.hpp>
#include <iostream>

using namespace sf;
using namespace std;

string login = ""; //to jest podane, ale tutaj usunąłem
string haslo = "";//to jest podane, ale tutaj usunąłem
string adres = "";//to jest podane, ale tutaj usunąłem
int main()
{
    //utworzenie polaczenia FTP
    Ftp ftp;
    Ftp::Response odp = ftp.connect(adres.c_str(),21,sf::seconds(10));
    if(odp.isOk())
        cout<<"Polaczono!"<<endl;
    //logowanie
    odp = ftp.login(login,haslo);
    if(odp.isOk())
        cout<<"Zalogowano pomyslnie!"<<endl;
    else
    {
        cout<<"Zly login lub haslo"<<endl;
        cin.get();
        return 1;
    }
    cout<<"Pobieranie..."<<endl;
    odp = ftp.download("VexentoGlow.ogg","",sf::Ftp::Binary);
    if(!odp.isOk())
        cout<<"BLAD"<<endl;
    else
        cout<<"Pobrano!"<<endl;
    getchar();
    ftp.disconnect();

    return 0;
}

(Ten przykład jest od Szymon Siarkiewicz)

I wszystko działało dopóki nie przełączyłem w tryb release.

W release program się wywala przy 

ftp.download("VexentoGlow.ogg","",sf::Ftp::Binary);

Ktoś miał podobny problem? Wie jak temu zaradzić?

Pozdrawiam.

PS: Nie będę kompresować muzyki bo brzmi gorzej niż zmywarka

2 odpowiedzi

+1 głos
odpowiedź 26 lipca 2016 przez niezalogowany

Nie żeby coś, ale pomysł na to, żeby pobierać muzykę i wszystkie potrzebne pliki, zamiast je dać od razu, jest według mnie głupi :I Gry przecież mogą ważyć nawet 1GB (mówię tutaj oczywiście o grach 2D), może 0,5GB, ale to i tak mało.\

No ale OK, zrobiłem swoje (miałem już gotową próbkę, bo wcześniej też się tym bawiłem, tylko pozmieniałem parę rzeczy). Oto mój kod:

#include <iostream>
#include <fstream>
#include <stdio.h>
#include <SFML/Network.hpp>

using namespace std;
using namespace sf;

string napis;
fstream plik;

Ftp ftp;

int main()
{
    cout << endl << "\tWitaj w tym wcale nie korzystajacym z internetu programie :)" << endl << endl;
    cout << "Napisz jakiekolwiek zdanie: ";

    if(ftp.connect("IP_mojego_serwera_FTP").isOk())
    {
        cout << endl << "Polaczono sie z serwerem." << endl;
        if(ftp.login("login","hasło").isOk())
        {
            cout << "Zalogowano sie do serwera." << endl;
            if(ftp.download("3MB_pliku_muzycznego.mp3","",Ftp::Binary).isOk())
                cout << "Pobrano pliki z serwera." << endl;
            else
                cout << "Nie udalo sie pobrac plikow z serwera." << endl;
        }
        else
        {
            cout << "Nie udalo sie zalogowac od serwera." << endl;
        }
        ftp.disconnect();
        cout << "Rozlaczono sie z serwerem." << endl;
    }
    else
    {
        cout << "Nie udalo polaczyc sie z serwerem." << endl;
    }

    cout << endl << "Dziekujemy za skorzystanie z naszych uslug i za pozwolenie zhackowania twojego kompa :)";

    getchar();

    return 0;
}

Po prostu zamieniłem upload() na download() i parę innych rzeczy. I wiesz co? Nie działa :I Ale tylko w trybie Release, tak jak sam powiedziałeś... W trybie Release nie działa ani pobieranie, ani wrzucanie plików. Dziwna sprawa... Twój kod jest w takim razie dobry, ale coś jest z SFML-em. Może napisz o tym na forum SFML-a, bo to jest dziwne, że takie coś jeszcze nie zostało odkryte :/ No chyba, że zostało i jest na forum SFML-a. No, dziwna sprawa.

komentarz 26 lipca 2016 przez niezalogowany
Szczerze mówiąc, to nie jestem pewien, o co mu chodzi. Mówi coś o standardowej bibliotece C++, czyli na przykład iostream, vector, cstdlib itp., ale nie wiem o co mu chodzi dokładniej :/ Chyba będziesz musiał się zapytać, o co dokładnie chodzi.
komentarz 27 lipca 2016 przez maly Nałogowiec (37,190 p.)
Chce żebyś podał to co masz w "Build log".
komentarz 27 lipca 2016 przez niezalogowany
komentarz 9 sierpnia 2016 przez JAKUBW Nałogowiec (33,470 p.)
edycja 9 sierpnia 2016 przez JAKUBW

Wiecie co? Mam nowy problem... Shadery w trybie release też nie działają pod Code::Block :( Tamtego problemu nie rozwiązałem a już kolejny. Aczkolwiek loadFromMemory działa więc nie wszystko stracone :)

komentarz 9 sierpnia 2016 przez niezalogowany
No, ja się shaderami nie interesuję, więc ja ci w tej sprawie niestety nie pomogę :S Ale ogólnie dziwna sprawa z tymi niedziałającymi rzeczami w trybie Release, no ciekawe :/
0 głosów
odpowiedź 27 lipca 2016 przez maly Nałogowiec (37,190 p.)
Jeśli pobrałeś SFML z oficjalnej strony to może nie działać z kompilatorem dostarczonym z Code::Blocks.

Spróbuj sam skompilować SFML przy pomocy CMake.

Podobne pytania

+1 głos
2 odpowiedzi 423 wizyt
pytanie zadane 18 czerwca 2017 w C i C++ przez Wojciech Gola Nowicjusz (130 p.)
0 głosów
1 odpowiedź 488 wizyt
pytanie zadane 17 lutego 2018 w C i C++ przez Shiro Stary wyjadacz (10,300 p.)
0 głosów
1 odpowiedź 1,115 wizyt
pytanie zadane 19 listopada 2016 w C i C++ przez dorgovor Użytkownik (580 p.)

93,440 zapytań

142,434 odpowiedzi

322,681 komentarzy

62,802 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

...