Ciao a tutti,
avrei un problema in una DLL con l'uso di procedure e assegnazioni a variabili.
Mi spiego meglio sperando che in qualche modo si possa fare ciò che vorrei:
in una funzione apro la porta COM1 e invio alcuni dati alla seriale dopodichè li ricevo (almeno spero) tramite DataPacket. La ricezione avviene tramite procedura all'evento OnStringPacket(Sender: TObject; Data: String) ma dato che le procedure non ritornano un valore, devo riuscire ad assegnare a una variabile (interna alla mia funzione) il valore di "Data" creata dalla procedura. Questo perchè il dato ricevuto devo rispedirlo all'applicazione che ha richiamato la funzione nella DLL. La DLL non ha form, solo codice.
Questa è una parte del codice inserita nella mia funzione:
codice:
var Data: string;
.
.
.
if ApdComPort1.Open then
begin
ApdComPort1.PutString(chr($04));
ApdComPort1.PutString(chr($01)+chr($41)+DID+chr($05));
ApdDataPacket1.StartCond := scString;
ApdDataPacket1.StartString := '02';
ApdDataPacket1.EndCond := [ecString];
ApdDataPacket1.EndString := '03'+'?';
ApdDataPacket1.IncludeStrings := true;
ApdDataPacket1.OnStringPacket(ApdDataPacket1, Data); <------
ResponseBox := Data; <------
.
.
.
Non ci sono errori di compilazione ma all'avvio mi da access violation. L'istruzione che provova l'errore è proprio ApdDataPacket1.OnStringPacket(ApdDataPacket1, Data);
La procedura OnStringPacket salva i dati reperiti nella variabile Data e al termine dell'evento la varibile viene azzerata. E' possibile fare qualcosa?
Grazie