0

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;

残念ながら、バッファを読み取ることができません。あなたはなにか考えはありますか?

4

1 に答える 1

2

明らかに、RxCount受信したバイト数がわかります。関数は、Receiveバッファを与えることを期待しており、指定したサイズまでそのバッファを埋めます。コードでサイズを指定しましたが、バッファを指定していません。バッファ用のスペースを割り当てる必要があります。WideStringをバッファーとして使用する場合は、次のようにスペースを割り当てSetLengthます。

Szam := RxCount;
SetLength(Parancs, Szam div 2);
Receive(PWideChar(Parancs), Szam);

の戻り値が何を意味するのかわからないReceiveので、ここではその使用法を示していません。ドキュメントを確認すれば、それが何のためにあるのかを知ることができると確信しています。

于 2013-08-28T19:35:59.360 に答える