UP!! Niente da fare, l'evento non viene associato.

codice:
type
  TPortCom = class(TObject)
    ApdDataPacket1: TApdDataPacket;
    ApdComPort1: TApdComPort;
  public
    constructor Create(AOwner: TComponent);
    destructor Destroy; override;
    procedure ApdDataPacket1Packet(Sender: TObject; Data: Pointer; Size: Integer);
  end;

var
  PortCom       : TPortCom;
  ET               : EventTimer;
  Conn            : Boolean;
  Prova           : PChar;

constructor TPortCom.Create(AOwner: TComponent);
begin
  ApdComPort1 := TApdComPort.Create(nil);
  ApdDataPacket1 := TApdDataPacket.Create(nil);
end;

destructor TPortCom.Destroy;
begin
  ApdComPort1.Open := false;
  FreeAndNil(ApdComPort1);
  FreeAndNil(ApdDataPacket1);
  ApdComPort1.Destroy;
  ApdDataPacket1.Destroy;
end;

procedure TPortCom.ApdDataPacket1Packet(Sender: TObject; Data: Pointer; Size: Integer);
begin
Prova := Data;
end;

Function DownloadPollingNEW(ADD: PChar; IDBOX: PChar): PChar; export; StdCall;
 var
  Response    : String;
  VerifyXor   : Byte;
  I           : Integer;
begin
      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+chr($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;
      //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;

Procedure Connect(Baud: PChar; COM: PChar) export; StdCall;
var Creato: String;
begin
  PortCom := TPortCom.Create(nil);
  try
  //Configuro la porta seriale e la apro per iniziare le comunicazioni
    PortCom.ApdComPort1.ComNumber := StrToInt(COM);
    PortCom.ApdComPort1.Baud := StrToInt(Baud);
    PortCom.ApdComPort1.Parity := pNone;
    PortCom.ApdComPort1.DataBits := 8;
    PortCom.ApdComPort1.StopBits := 1;
    PortCom.ApdComPort1.InSize := 256;
    PortCom.ApdComPort1.Open := true;
    Conn := true;
  except
    FreeAndNil(PortCom.ApdComPort1);
  end;
end;

Procedure Disconnect() export; StdCall;
begin
  PortCom.ApdComPort1.open := false;
  FreeAndNil(PortCom.ApdComPort1);
  FreeAndNil(PortCom.ApdDataPacket1);
  Conn := false;
end;