Пример функции, читающей Size байт из порта:
Код
function ReadBytes(const Value: Pointer; Size: cardinal): boolean;
begin
Result := (ComPort.ReadData(PChar(Value), Size) = Size);
if not(Result) then
begin
MessageDlg(sDeviceNoResponseError, mtError, [mbOk], 0);
end;
end;
Ее использование:
Код
var
GroupName: array[0..IP_GROUP_NAME_LENGTH-1] of byte;
...
if ReadBytes(@GroupName, IP_GROUP_NAME_LENGTH) then
...
Буфером никогда не пользовался, но думаю, что нужно просто сделать обработчик события OnReceivePacket. Скорее всего обработчик будет аналогичен обработчику события OnReceiveData. Пример вот:
Код
procedure TfrmMain.ComPortReceiveData(Sender: TObject; DataPtr: Pointer; DataSize: Cardinal);
var
Str: string;
begin
Str := StringOfChar(' ', DataSize);
Move(DataPtr^, PChar(Str)^, DataSize);
end;
Теперь Str содержит строку длиной DataSize байт.