nxNetwork.pas String и {$H+}

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

nxNetwork.pas String и {$H+}

Сообщение ssadragon » 04.10.2013 06:23:45

Нарыл недавно модуль nxNetwork.pas и пример его использования.
Так вот при отправке строки более 255 символов она режется до 255 символов, что логично, т.к. в нем не стоит директива {$H+}. НО если эту директиву добавить то происходит то что на скрине(((

P.S. Модуль и пример прилагается
У вас нет необходимых прав для просмотра вложений в этом сообщении.
ssadragon
постоялец
 
Сообщения: 148
Зарегистрирован: 03.12.2012 20:21:35

Re: nxNetwork.pas String и {$H+}

Сообщение hinst » 04.10.2013 13:38:23

а что там происходит? я что-то смотрел-смотрел на этот скрин, так и не понял, что там такого нехорошего(( происходит
Аватара пользователя
hinst
энтузиаст
 
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Re: nxNetwork.pas String и {$H+}

Сообщение ssadragon » 04.10.2013 14:26:23

hinst писал(а):а что там происходит? я что-то смотрел-смотрел на этот скрин, так и не понял, что там такого нехорошего(( происходит

Слово 'test' отправляется через раз кракозябрами
ssadragon
постоялец
 
Сообщения: 148
Зарегистрирован: 03.12.2012 20:21:35

Re: nxNetwork.pas String и {$H+}

Сообщение Ism » 04.10.2013 15:14:16

ssadragon писал(а):
hinst писал(а):а что там происходит? я что-то смотрел-смотрел на этот скрин, так и не понял, что там такого нехорошего(( происходит

Слово 'test' отправляется через раз кракозябрами

Ну так если память выделена на 255 символов, то превышение пишет туда, где память не защищена, то есть может перезаписаться любым мусором. Обычно программа вылетает с ошибкой, но иногда запись в невыделенную память прокатывает и происходят глюки

Также возможно неправильно происходит инициализация строки при повторных операциях
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: nxNetwork.pas String и {$H+}

Сообщение ssadragon » 07.10.2013 16:52:21

Ism писал(а):Ну так если память выделена на 255 символов, то превышение пишет туда

Какое может быть превышение у слова "test"?
Я же пишу что
ssadragon писал(а):если эту директиву добавить
происходит какая-то фигня.
Во всей программе использую эту директиву и не разу не было проблем, а в данном примере какая-то чертовщина творится
ssadragon
постоялец
 
Сообщения: 148
Зарегистрирован: 03.12.2012 20:21:35

Re: nxNetwork.pas String и {$H+}

Сообщение Alex2013 » 08.10.2013 12:15:06

Может {$mode delphi} поможет ?
А вообще я думаю что там может быть применена конструкция типа ord(s[0]) (древний способ узнать длину строки ) Замени на Lenght(S) и все будет ок
И не забывай про UTF8 ! - эта сволочная кодировка может вылезать боком где угодно !
Alex2013
долгожитель
 
Сообщения: 3145
Зарегистрирован: 03.04.2013 11:59:44

Re: nxNetwork.pas String и {$H+}

Сообщение ssadragon » 08.10.2013 18:23:39

Alex2013
Вообще проблема происходит при присвоении стринговой переменной значения
Код: Выделить всё
  If Not server.Opened Then
    exit;
  xs := 'Test';                             ---------------вот в этом месте происходит некорректное присвоение через раз
  memo1.Lines.Add(xs);
  If server.UDP Then
    TUDPServer(server).SendString(xs)
  Else
    TTCPServer(server).SendString(SpinEdit1.Value, xs);

этот кусок из модуля формы.
А если убрать {$H+}(ну и конечно же убрать галочку в "Использовать строки AnsiString" в параметрах проекта) из модуля nxNetwork то все становится нормально.
P.S. прошу прощения, немного недообъяснил суть проблемы.
ssadragon
постоялец
 
Сообщения: 148
Зарегистрирован: 03.12.2012 20:21:35

Re: nxNetwork.pas String и {$H+}

Сообщение Alex2013 » 13.10.2013 18:36:03

xs := 'Test'+#0; ? (Возможно нет конца строки)
Alex2013
долгожитель
 
Сообщения: 3145
Зарегистрирован: 03.04.2013 11:59:44

Re: nxNetwork.pas String и {$H+}

Сообщение ssadragon » 13.10.2013 21:02:37

Alex2013 писал(а):xs := 'Test'+#0; ? (Возможно нет конца строки)

Не помогло :cry:
ssadragon
постоялец
 
Сообщения: 148
Зарегистрирован: 03.12.2012 20:21:35


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 222

Рейтинг@Mail.ru