Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
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:
Codice sorgente - presumibilmente Pascal
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:
Codice sorgente - presumibilmente Pascal
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;
Codice sorgente - presumibilmente Delphi
{$i-}
testo:='';
doc:=false;
repeat
buffer:='';
system.Readln(Sin,Buffer);
ifnot doc thenbegin//aggiunge davanti ad ogni header http la stringa "av"
if(length(buffer)=0)thenbegin doc:=true;end
elsebegin
testo:=strcat(testo, av);
end;
end;
agg(buffer);
until(ioresult <> 0)oreof(sin);
Close(sout);
setwindowtext(hedit,testo);
{$I+}
Durante il debug ho scoperto che l'errore risulta solamente la quarta volta che esegue la linea
Codice sorgente - presumibilmente Plain Text
testo:=strcat(testo, av);
.
Non so proprio perché succeda.
Chi ha qualche ipotesi ??
Magari se avete anche suggerimenti per migliorare il codice.
al momento non posso provare il pascal, in quanto ho solo la console di delphi, ma prometto di testare quanto dico, dunque prendi tutto con le "molle" ...
Perchè non lavori con le stringhe e quando chiami l'API di windows gli passi la stringa castata a pchar ?
Codice sorgente - presumibilmente Pascal
var testo:string;
...
setwindowtext(hedit,Pchar(testo));
Di solito con delphi funziona e non mi devo smazzare tutte le menate dei PChar, con il pascal "standard" non ho provato, ma come ho detto mi riprometto di farlo.
G.
Ultima modifica effettuata da Phi il 22/05/2011 alle 11:03