Originariamente inviato da colde
Spiego il problema: alla prima chiamata della funzione non ho nessun tipo di errore o problema, invio i dati tramite seriale e ricevo la risposta correttamente; se richiamo la funzione per due volte consecutive, la seconda chiamata alla funzione mi genera errore di Invalid Pointer Operation sull'istruzione ApdComPort1.Free
Perchè? Dove sbaglio?
All'inizio della funzione, hai inserito una condizione

codice:
if ApdComPort1 = nil then ...
ma il problema è che tale variabile non viene impostata a nil da nessuna parte.

La chiamata a Free consente di distruggere l'oggetto, ma il riferimento allo stesso non viene impostato a nil; occorre farlo manualmente, oppure usare la procedura FreeAndNil.

Infine, la creazione dell'oggetto deve essere esterna al ciclo try...finally, in quanto se la creazione fallisce, viene eseguito il blocco del finally che distrugge un oggetto...inesistente.