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

    [freepascal] leggere file binari

    mi è costato un mal di testa, devo inviare un file pdf con protocollo http da una procedura scritta in free pascal ed uso questa funzione
    Codice PHP:
    var
      
    THandle;
      
    sizer  longInt;
      
    buf pointer;
    begin

         H 
    := FileOpen(nome_file_da_inviarefmOpenread);

         
    size := FileSeek(H0fsfromEnd);

         
    buf := getmem(size);

         
    FileSeek(H0fsfromBeginning);

         
    := FileRead(Hbuf^, size);

         
    FileClose(H);

    ... 
    okuna volta che lo ho in un buffer lo spedisco tal quale dopo l'header

         freemem(buf);
    end; 
    adesso funziona.

    il problema è che scrivevo

    r := FileRead(H, buf, size);
    e non dereferenziavo buf.
    La dichiarazione di FileRead è
    http://www.freepascal.org/docs-html/.../fileread.html

    Non riesco a capire perchè sbagliavo, nella mia testa FileRead accetta un Pointer.

    grazie a chi me lo spiega
    ciao
    sergio

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Vuoi spiegato perche' sbagliavi anche se lo hai capito da solo ... ?

  3. #3
    perché ragionava in C .
    Alloco memoria in un buffer, che è poi un puntatore ad un char e passo questo buffer alla funzione che legge i dati dal file (nella mia mente devo passare il puntatore), e scrivevo quindi

    r := FileRead(H, buf, size);

    in realtà va scritta come

    r := FileRead(H, buf^, size);
    dereferenziando buf.

    Quello che non capisco è perché devo mettere buf^ anziché buf ,
    tutto qui
    ciao
    sergio

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Originariamente inviato da mondobimbi
    Quello che non capisco è perché devo mettere buf^ anziché buf ,
    Siccome il prototipo della funzione prevede l'uso della parola chiave var, presumo che un puntatore al valore passato come parametro venga già passato autonomamente dal codice compilato; usando una variabile non deferenziata, suppongo che invece venga passato il puntatore alla locazione che contiene l'indirizzo dei dati, e non i dati effettivi da utilizzare.

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

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

  5. #5
    purtroppo la cosa non mi era chiara, infatti ho perso 4 ore (ed emicrania) per venirne a capo.
    Probabilmente è qualcosa come l'equivalente dei reference in C++ .

    grazie per il chiarimento

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Originariamente inviato da mondobimbi
    purtroppo la cosa non mi era chiara, infatti ho perso 4 ore (ed emicrania) per venirne a capo.
    Preciso che la mia è solo una supposizione, fatta peraltro basandomi sulle informazioni che hai fornito; se mi fossi trovato nella stessa situazione, probabilmente avrei inizialmente sbagliato la scrittura anche io.

    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 © 2025 vBulletin Solutions, Inc. All rights reserved.