Incredibile, perdonami ma è più forte di me, non riesco a trovare il senso di questo comportamento. Ho semplificato le due funzioni all'inverosimile per isolare il problema ma non c'è niente da fare, va contro ogni mia logica.
Codice DLL
codice:
//Funzione che Recupera i dati dalla seriale
Function DownloadPolling(IDBOX: String): String; StdCall;
var
Response : String;
begin
Response := '';
if Conn then
begin
ApdComPort1.PutString(chr($04));
ApdComPort1.PutString(chr($01)+chr($41)+IDBOX+chr($05));
NewTimer(ET, 4);
repeat
while ApdComPort1.CharReady do
begin
Response := Response+ApdComPort1.GetChar;
end;
until TimerExpired(ET);
end;
DownloadPolling := Response; ---> QUI ALLA SECONDA CHIAMATA NON VIENE IMPOSTATO NULLA MA RESPONSE CONTIENE I DATI.
end;
Function Polling(DID: PChar): PChar; export; StdCall;
var
ResponseBox : String;
begin
if Conn then
begin
repeat
ResponseBox := DownloadPolling(DID);
until ResponseBox <> '';
end
else
begin
ResponseBox := 'ERROR: COM Port Close';
end;
GetMem(Result,Length(ResponseBox)+1);
Result := StrPCopy(Result, ResponseBox);
end;
Codice Form del Software
codice:
TextReturn := Polling('PIPPO');
Memo1.Lines.Add(TextReturn);
FreeMem(TextReturn); --> Questa parte vorrei farla gestire dalla DLL con una funzione
Ecco quello che succede:
alla prima chiamata della funzione Polling() funziona tutto regolarmente (richiama la funzione DownloadPolling e ritorna il valore correttamente), alla seconda invece, quando arriva ad eseguire il codice della funzione DownloadPolling, i dati vengono scaricati dalla seriale in modo corretto ma non viene assegnato nulla alla variabile di ritorno. Perchè? Porca pupazza perchè?????