21/05/11 12:08
Phi
Salve a tutti.
Ho un piccolo problemino legato ad un RunTime Error 216 in un programma che sto scrivendo per Windows.
L'errore avviene in una procedura adibita a ricevere stringhe da un socket client che è connesso ad un server ed ad aggiungerle ad una "null-terminated string"(offero Pchar) perché questa possa essere successivamente inserita in un Edit Control con le WinApi.
Per realizzare il programma sto usando le funzioni della unit string
Le variabili sono queste:
Il testo incriminato, preso
dal programma, è il seguente:
Durante il debug ho scoperto che l'errore risulta solamente la quarta volta che esegue la linea
Non so proprio perché succeda.
Chi ha qualche ipotesi ??
Magari se avete anche suggerimenti per migliorare il codice.
Grazie, in anticipo
Ho un piccolo problemino legato ad un RunTime Error 216 in un programma che sto scrivendo per Windows.
L'errore avviene in una procedura adibita a ricevere stringhe da un socket client che è connesso ad un server ed ad aggiungerle ad una "null-terminated string"(offero Pchar) perché questa possa essere successivamente inserita in un Edit Control con le WinApi.
Per realizzare il programma sto usando le funzioni della unit string
Le variabili sono queste:
const empty:pchar=''; cr:pchar=#13#10; av:pchar=#9' - '#9; var Sin,Sout: Text; hhost, hedit, huri : hwnd; testo, add : pchar; buffer:string[255]; doc:boolean;
Il testo incriminato, preso
dal programma, è il seguente:
procedure agg(s:string); begin s:=concat(s,#13#10#0); add:=stralloc(length(s)+1); add:=strpcopy(add,s); testo:=strcat(testo, add); writeln('add:"', add,'"'); dispose(add); add:=nil; end;
{$i-} testo:=''; doc:=false; repeat buffer:=''; system.Readln(Sin,Buffer); if not doc then begin //aggiunge davanti ad ogni header http la stringa "av" if (length(buffer)=0) then begin doc:=true; end else begin testo:=strcat(testo, av); end; end; agg(buffer); until (ioresult <> 0) or eof(sin); Close(sout); setwindowtext(hedit,testo); {$I+}
Durante il debug ho scoperto che l'errore risulta solamente la quarta volta che esegue la linea
testo:=strcat(testo, av);.
Non so proprio perché succeda.
Chi ha qualche ipotesi ??
Magari se avete anche suggerimenti per migliorare il codice.
Grazie, in anticipo
aaa