Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [C++,wxWidgets]Conversione size_t a int

    So che mi direte che il size_t non è altro che un unsigned int come si legge qua e qua , però usando il metodo SetRange(int) e SetValue(int)di un wxGauge e passandogli un size_t (ovvero la dimensione (tramite GetSize() ) di un wxInputStream) invece di un int, non funziona.

    In compilazione non crea alcun errore o warning, ma quando parte l'applicazione la barra di progresso sta ferma, mentre se ci metto un int funziona. Ho provato a fare un cast esplicito int s_int=(int)s_size_t; ma non l'accetta comunque. E' strano ma sono veramente in palla.

    Grazie per l'aiuto!



    [Edit]Piccolo appunto appena riscontrato: se dichiaro un size_t size=25; e passato ad uno dei 2 metodi funziona.
    [/Edit]

  2. #2
    Il problema sopra scritto (non più da considerare) era che la barra di un wxGauge non avanzava mai ( SetValue(int) )se passavo un size_t prelevato da un wxStreamInput tramite il metodo size_t GetSize().

    Ho tentato di modificato il thread perché, dopo altri innumerevoli tentativi, mi sono accorto che non era un problema di conversione, ma il fatto che il medoto usato per prelevare la dimensione dello stream ritorna sempre 0 (come del resto GetLastRead() ).

    A questo punto mi sorge un immenso dubbio. Come può questo listato funzionare se il medoto sopracitato non restituisce il giusto valore?? (eppure funziona egregiamente... )
    codice:
    wxFTP ftp;
        // La connessione sarà anonima se si eliminano queste 2 righe
        ftp.SetUser( d_user );
        ftp.SetPassword( d_pass );
    
        WxGauge1->SetValue(0);
    //Connessione in corso!
        WxLog->AppendText(l_con_cors);
    
        if ( !ftp.Connect( d_host ) )
        {
         wxLogError("Impossibile connettersi");
         WxLog->AppendText(e_conn);
         return;
        }
    
    //Connessione effettuata
        WxLog->AppendText(l_con_eff);
    
        ftp.ChDir( d_path );
        in = ftp.GetInputStream( d_file );
        if ( !in )
        {
         wxLogError("File non presente sul server");
         WxLog->AppendText(e_acc_file);
        }
        else
        {
            size_t size = in->GetSize();
            char *data = new char[size];
    //Download in corso.
            WxLog->AppendText(l_in_down);
    
            WxGauge1->SetRange( size ); // Range Gauge= Stream
            WxTimer1->Start(1);//Attivo timer per ProgressBar
            
            if ( !in->Read(data, size) )
             {
               wxLogError("Errore di scrittura del file");
                    WxLog->AppendText(e_read_file);
             }
            else
            {
             // file data is in the buffer
             wxTransferStreamToFile(*in, d_file );
             //Download eseguito
             WxGauge1->SetValue(size);
             WxLog->AppendText(l_ok_down);
            }
            WxLog->AppendText(l_con_close);
            WxTimer1->Stop();
            delete [] data;
            in->Reset();
        }
    Come posso rimediare al mio problemuccio??

    Grazie mille


  3. #3

  4. #4

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Ho provveduto a "spezzare" la discussione: la seconda parte si trova qui.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.