2013-08-28 3 views
0

Я использую CiaComPort в Delphi5, и у меня есть проблема. Я посылаю команду на устройство. Я использую функцию Send(Buffer: Pointer; Len: integer): cardinal.получать приходящие символы в ciacomport

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; 

К сожалению, я не могу прочитать буфер. У тебя есть идеи?

ответ

2

Очевидно, RxCount сообщает, сколько байтов вы получили. Функция Receive ожидает, что вы предоставите ей буфер, а затем заполнит этот буфер до размера, который вы ему скажете. В вашем коде вы предоставили размер, но вы не предоставили буфер. Вы должны выделить место для буфера. Если вы используете WideString в качестве буфера, то выделить пространство SetLength:

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

Я не знаю, что возвращаемое значение Receive средства, так что я не продемонстрировал его использование здесь. Я уверен, что если вы проверите документацию, вы можете узнать, для чего она предназначена.

 Смежные вопросы

  • Нет связанных вопросов^_^