我在Delphi5中使用CiaComPort,我遇到了问题。我向设备发送命令。我使用Send(Buffer: Pointer; Len: integer): cardinal
函数。
procedure TFormMain.CiaComportraParancsotKuld(CNev, Szoveg: WideString; NyoId, PortSzam: Integer);
var
Kar: PChar;
Szam: Integer;
Parancs: WideString;
begin
Parancs := #$0002+'~JS0|'+CNev+'|0|'+Szoveg+#$0003;
Kar := PChar(Parancs);
Szam := length(Parancs)*2;
FormMain.CiaComPort1.Open := True;
FormMain.CiaComPort1.Send(Kar, Szam);
FormMain.CiaComPort1.Open := False;
end;
这个程序很好,但是当我发送命令时,很遗憾我没有看到设备中即将出现的字符,因为在我看来我没有使用CiaComPort1DataAvailable(Sender: TObject)
井。
//Receive(Buffer: Pointer; Len: integer): cardinal
procedure TForm1.CiaComPort1DataAvailable(Sender: TObject);
var
Kar: PChar;
Szam: Integer;
Parancs: WideString;
begin
Szam := RxCount;
Parancs := WideString(Receive(Kar, Szam)); //I think that's not good.
Memo1.Lines.Add(Parancs);
end;
不幸的是我无法读取缓冲区。你有什么想法吗?
答案 0 :(得分:2)
显然,RxCount
会告诉您收到的字节数。 Receive
函数希望你给它一个缓冲区,然后它将填充该缓冲区,达到你告诉它的大小。在您的代码中,您提供了大小,但是您没有提供缓冲区。您需要为缓冲区分配空间。如果您使用WideString
作为缓冲区,则使用SetLength
分配空格:
Szam := RxCount;
SetLength(Parancs, Szam div 2);
Receive(PWideChar(Parancs), Szam);
我不知道Receive
的返回值是什么意思,所以我在这里没有证明它的用途。我相信如果您查看文档,您可以了解它的用途。