Обновление до XE5 с Delphi 5: UDPClient.SendBuffer

Я обновляю старую версию Delphi до XE5. В более старой версии используется Indy Component UDPClient, XE5 говорит, что SendBuffer не может быть вызван с этими аргументами. Кто-нибудь, пожалуйста, помогите мне. Вот пример фрагмента кода:

var
  i: integer;
begin
  i := bpt;
  if i <> 0
  begin 
   //send Reset byte
   myBuff[i] := chr(_reset);      // reboot the LIA
   inc(i);
   IdUDPClient1.SendBuffer(myBuff,i);
  end;
end;

где myBuff: массив [0..255] символов;

Спасибо заранее за вашу помощь.

Майк


person MikeA    schedule 25.11.2014    source источник
comment
Вы понимаете, что Char теперь совсем другой тип?   -  person David Heffernan    schedule 25.11.2014
comment
Назовите это как IdUDPClient1.SendBuffer(ToBytes(DataThatYouWantToSend));.   -  person TLama    schedule 25.11.2014
comment
@TLama Я считаю, что проблема заключается в отправке данных, а не в том, как их отправить   -  person David Heffernan    schedule 25.11.2014
comment
@TLama: ToBytes() не имеет перегрузки для символьных массивов. Передача массива char[] вызовет перегрузку String, поэтому вам нужно будет убедиться, что массив завершается нулем. В противном случае используйте вместо этого RawToBytes().   -  person Remy Lebeau    schedule 25.11.2014


Ответы (1)


Вам необходимо преобразовать ваши данные в TIdBytes, который представляет собой динамический массив байтов. Вы также должны принять во внимание, что Char теперь имеет размер 2 байта, поэтому, если вам нужно оставаться совместимым с существующим приложением, используйте AnsiChar или Byte вместо Char:

var
  myBuff: array[0..255] of Byte;
...
var
  i: integer;
begin
  i := bpt;
  if i <> 0 then
  begin 
   //send Reset byte
   myBuff[i] := _reset;      // reboot the LIA
   inc(i);
   IdUDPClient1.SendBuffer(RawToBytes(myBuff[0],I));
  end;
end;

Or:

var
  myBuff: TIdBytes;
...
var
  i: integer;
begin
  SetLength(myBuff, 256);
  ...
  i := bpt;
  if i <> 0 then
  begin 
   //send Reset byte
   myBuff[i] := _reset;      // reboot the LIA
   inc(i);
   IdUDPClient1.SendBuffer(myBuff);
  end;
end;
person Remy Lebeau    schedule 25.11.2014
comment
Реми, спасибо, что сделали свое дело. Конечно, теперь у меня есть новый с ReceiveBuffer. Я постараюсь выяснить это перед публикацией, если вы не знаете, что это: IdUDPClient.ReceiveBuffer (r_buf, buff_Len, -1) - person MikeA; 25.11.2014
comment
Вы также должны использовать TIdBytes для этого. Используйте SetLength(), чтобы предварительно выделить его до желаемого размера, затем вызовите ReceiveBuffer() с ним, а затем вы можете скопировать данные из него по мере необходимости либо напрямую, либо с помощью BytesToRaw(). - person Remy Lebeau; 25.11.2014
comment
Пытался .. Не повезло. Запуск новой темы :( Большое спасибо за вашу помощь. Я очень ценю это! - person MikeA; 26.11.2014