nxNetwork.pas String и {$H+}
Модератор: Модераторы
nxNetwork.pas String и {$H+}
Нарыл недавно модуль nxNetwork.pas и пример его использования.
Так вот при отправке строки более 255 символов она режется до 255 символов, что логично, т.к. в нем не стоит директива {$H+}. НО если эту директиву добавить то происходит то что на скрине(((
P.S. Модуль и пример прилагается
Так вот при отправке строки более 255 символов она режется до 255 символов, что логично, т.к. в нем не стоит директива {$H+}. НО если эту директиву добавить то происходит то что на скрине(((
P.S. Модуль и пример прилагается
У вас нет необходимых прав для просмотра вложений в этом сообщении.
а что там происходит? я что-то смотрел-смотрел на этот скрин, так и не понял, что там такого нехорошего(( происходит
hinst писал(а):а что там происходит? я что-то смотрел-смотрел на этот скрин, так и не понял, что там такого нехорошего(( происходит
Слово 'test' отправляется через раз кракозябрами
ssadragon писал(а):hinst писал(а):а что там происходит? я что-то смотрел-смотрел на этот скрин, так и не понял, что там такого нехорошего(( происходит
Слово 'test' отправляется через раз кракозябрами
Ну так если память выделена на 255 символов, то превышение пишет туда, где память не защищена, то есть может перезаписаться любым мусором. Обычно программа вылетает с ошибкой, но иногда запись в невыделенную память прокатывает и происходят глюки
Также возможно неправильно происходит инициализация строки при повторных операциях
Ism писал(а):Ну так если память выделена на 255 символов, то превышение пишет туда
Какое может быть превышение у слова "test"?
Я же пишу что
происходит какая-то фигня.ssadragon писал(а):если эту директиву добавить
Во всей программе использую эту директиву и не разу не было проблем, а в данном примере какая-то чертовщина творится
Может {$mode delphi} поможет ?
А вообще я думаю что там может быть применена конструкция типа ord(s[0]) (древний способ узнать длину строки ) Замени на Lenght(S) и все будет ок
И не забывай про UTF8 ! - эта сволочная кодировка может вылезать боком где угодно !
А вообще я думаю что там может быть применена конструкция типа ord(s[0]) (древний способ узнать длину строки ) Замени на Lenght(S) и все будет ок
И не забывай про UTF8 ! - эта сволочная кодировка может вылезать боком где угодно !
Alex2013
Вообще проблема происходит при присвоении стринговой переменной значения
этот кусок из модуля формы.
А если убрать {$H+}(ну и конечно же убрать галочку в "Использовать строки AnsiString" в параметрах проекта) из модуля nxNetwork то все становится нормально.
P.S. прошу прощения, немного недообъяснил суть проблемы.
Вообще проблема происходит при присвоении стринговой переменной значения
Код: Выделить всё
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. прошу прощения, немного недообъяснил суть проблемы.
xs := 'Test'+#0; ? (Возможно нет конца строки)
Alex2013 писал(а):xs := 'Test'+#0; ? (Возможно нет конца строки)
Не помогло
