grazie dell'indicazione.
Ci ho lavorato un po' per trovare quale fosse la strada giusta per assicurarmi che tutto fosse rilasciato nella maniera corretta, il meglio che ho pensato è di inserire tutto nel metodo Free, anche perchè, per abitudine, così libero gli oggetti.
Ti posto il codice della procedura Free della classe TTBase deriva da TXML che deriva da TStringList.
Implementa la creazione di una pagina xml che viene appunto scritta su un file testo quando viene chiamata la procedura Free e trasferita in remoto.
in questa modo sono sicuro che quando libero la memoria di un oggetto derivato il tutto mi viene scritto su disco e trasferito in remoto semplicamente scrivento oggett.Free.codice:procedure TTBase.Free; var nome_file : string; locale_adr, remote_adr : string; host, user, psw : string; res : boolean; begin // lo preleva dalle impostazioni locale_adr := SetLocaleAdrMacro(IniFile.ReadString('Indirizzi Fisici', 'Root', '')); with DominiTbl do begin remote_adr := FieldByName('adr_root'); remote_adr := SetRemoteAdrMacro(fDominio, remote_adr); host := FieldByName('ftp_host'); user := FieldByName('ftp_user'); psw := FieldByName('ftp_password'); end; nome_file := GetFileName; SaveToFile(locale_adr + '/' + nome_file); res := FtpPutFile(host, '21', remote_adr + '/' + nome_file, locale_adr + '/' + nome_file, User, psw); with TLogFile.Create ('gesti.log') do begin if not res then Write('non è stato possibile trasferire il file ' + nome_file) else Write('file ' + nome_file + ' correttamente trasferito via ftp'); Free; end; with DominiTbl do Free; inherited; end;
Una classe figlia che implementa un layout a tre colonne ha il metodo Free
l'inherited finale mi assicura che tutta la catena venga eseguita prima della distruzione dell'oggetto.codice:procedure TLAY3.Free; begin Current := 'inside_sx'; AddChild('div'); Attributo('class', 'clear'); AddContent(''); Current := 'inside_dx'; AddChild('div'); Attributo('class', 'clear'); AddContent(''); Current := 'content_tag'; AddChild('div'); Attributo('class', 'clear'); AddContent(''); Current := 'innerColumnContainer'; AddChild('div'); Attributo('class', 'clear'); AddContent(''); inherited; end;
Se ti sembra che sia poco sicuro potrei provare a spostare il codice in Destroy.
ciao e grazie
sergio

Rispondi quotando