0

我在 Delphi 7 中使用 TCommPortDriver 组件,它非常适合串行通信。

但在 Delphi 11 中,接收数据是“奇怪的”,例如:

波特率 19200,奇偶校验 1,数据位 8,hwflow 无

在德尔福 7 “22.02.22 08:25:38 02 11 45991883904 * 0.00”

在delphi 11“”中,

我下载了最后一个版本,然后我在 Delphi Alexandria 中安装了旧版本,我做了很多测试,结果总是一样的。

该过程在两个版本中是相同的,一个简单的例子:

procedure TForm1.SerialTarifadorReceiveData(Sender: TObject; DataPtr: Pointer;
  DataSize: Cardinal);
var
    s: string;
begin
  s := StringOfChar( ' ', DataSize );
  move( DataPtr^, system.pchar(s)^, DataSize );
  ShowMessage(s);
end;

我相信问题出在 DataPtr 中。

请帮助我,谢谢,

4

2 回答 2

0

另一种编码更灵活的方法是:

var
  reader: TStreamReader;
  s: string;
begin
  reader := TStreamReader.Create(TPointerStream.Create(DataPtr, DataSize, True), TEncoding.ASCII);
  try
    reader.OwnStream;
    s := reader.ReadToEnd;
    ShowMessage(s);
  finally
    reader.Free;
  end;
end;
于 2022-02-22T12:07:17.347 回答
0

您收到的事件是向您传递一个指向包含您收到的数据(字节)的缓冲区的指针。

然后,您将这些数据逐字节复制到string. 在 Delphi 11 中,字符串类型是两个字节字符,所以每个字符现在是您输入的两个字节。

使用 RawByteString 具有单字节字符(如果您知道数据是 UTF8 流,则使用 UTF8String)。

于 2022-02-22T11:07:33.657 回答