TComPort i Write

0

Mam takie pytanie widze że Write działa szybciej niż WriteStr dlatego chcę załadować do Write zmienne typy bajt np.:

for i :=1 to 125 do
  begin
    ComPort1.Write (i, 1);
  end;

jak zamienić tan kod na poprawny?

0

Ord

0
TomekMus napisał(a)

Mam takie pytanie widze że Write działa szybciej niż WriteStr

jakoś smiem wątpić, czy szybciej...

// perform synchronous write operation
function TCustomComPort.Write(const Buffer; Count: Integer): Integer;
var
  AsyncPtr: PAsync;
begin
  InitAsync(AsyncPtr);
  try
    WriteAsync(Buffer, Count, AsyncPtr);
    Result := WaitForAsync(AsyncPtr);
  finally
    DoneAsync(AsyncPtr);
  end;
end;

// perform asynchronous write operation
function TCustomComPort.WriteStrAsync(const Str: string; var AsyncPtr: PAsync): Integer;
begin
  if Length(Str) > 0 then
    Result := WriteAsync(Str[1], Length(Str), AsyncPtr)
  else
    Result := 0;
end;

// perform synchronous write operation
function TCustomComPort.WriteStr(const Str: string): Integer;
var
  AsyncPtr: PAsync;
begin
  InitAsync(AsyncPtr);
  try
    WriteStrAsync(Str, AsyncPtr);
    Result := WaitForAsync(AsyncPtr);
  finally
    DoneAsync(AsyncPtr);
  end;
end;
0

Koledzy Ord nie działa do tej funkcji, ponieważ ja chce wysłać bajt za pomocą
ComPort.Write (Buffer:PAnsiChar; Caunt:Integer);

Jak zapisuje ComPort.Write (#100, 1) to działa !!!
A jak zapisze:

var
  B : Byte;
begin
  B:=10;
  ComPort.Write (Char(B), 1);// to kicha nie dział nie kompiluje się
  ComPort.Write (PChar(B), 1); 
//to kompiluje lecz jak tylko w programie jest wywołana funkcja to się zawiesza i wyskakuje błąd

end;
0

Nie wiem jakiego typu wartości oczekuje w pierwszym parametrze ta funkcja Write? Jeżeli Char to użyj Chr.

0

Jak się nie myle to PAnsiChar lecz jako bufor 1024bajtowy

Chr też nie działa

1 użytkowników online, w tym zalogowanych: 0, gości: 1