Dunque, mi ero dimenticato di inserire il riferimento all'evento di ApdDataPacket.OnPacket così ho inserito:

PortCom.ApdDataPacket1.OnPacket := PortCom.ApdDataPacket1Packet;

Ora la funzione DownloadPollingNEW() risulta così:

Function DownloadPollingNEW(ADD: PChar; IDBOX: PChar): PChar; export; StdCall;
var
Response : String;
VerifyXor : Byte;
I : Integer;
begin
FreeAndNil(Response);
Try
//Invio il carattere EOT di chiusura per evitare trasmissioni aperte precedentemente
PortCom.ApdComPort1.PutString(chr($04));
//Invio la stringa di Polling: [SOH][GID][DID][ENQ] che in esadecimale diventa [01][41][?][05]
PortCom.ApdComPort1.PutString(chr($01)+ADD+IDBOX+c hr($05));
PortCom.ApdDataPacket1.ComPort := PortCom.ApdComPort1;
PortCom.ApdDataPacket1.StartCond := scString;
PortCom.ApdDataPacket1.StartString := #2;
PortCom.ApdDataPacket1.EndCond := [ecString];
PortCom.ApdDataPacket1.EndString := #3+'?';
PortCom.ApdDataPacket1.OnPacket := PortCom.ApdDataPacket1Packet; <--- EVENTO
//Alloco memoria per contenere il valore di ritorno della funzione da passare al software
if Prova <> '' then
Response := Prova
else
Response := 'Nessun dato';
GetMem(Result,Length(Response));
//Copio il valore di ritorno nella variabile che la funzione ritorna
Result := StrPCopy(Result, Response);
//Result := PChar(Response);
Except
//Alloco memoria per contenere il valore di ritorno della funzione da passare al software
GetMem(Result,StrLen('ERROR'));
//Copio il valore di ritorno nella variabile che la funzione ritorna
Result := StrPCopy(Result, 'ERROR');
end;
end;


Però non lo rileva comunque, mi sai dire dove sbaglio? Mi sembra che sia corretto ma evidentemente c'è qualcosa di sbagliato nella dichiarazione del Type, credo che dipenda da quello.
Grazie