Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.08.21;
Скачать: CL | DM;

Вниз

Работа со строками   Найти похожие ветки 

 
chum   (2005-01-14 21:08) [0]

Есть такая проблемка.
есть переменная S:PChar
далее делаю присваивание
S:="xxxxxxxxxxxxxxxxxxxxxxx";
далее
S[1]:="q" - вот на этом месте приложение вылетает с ошибкой,
самое интересное, что при использовании VCL всё прекрасно работает.
Мне кажется что надо использовать какую-то директиву, но вот какую не пойму. Помогите решить проблему.


 
Ajax ©   (2005-01-14 23:05) [1]

PChar - это указатель на Char. То есть в переменной S ты хранишь адрес первого символа строки. Поэтому мне кажется использовать S[1] крайне сомнительно. Imho нужно либо использовать приведение типов, либо вычислять адрес нужного символа и писать туда.


 
chum   (2005-01-14 23:09) [2]

2Ajax

Ты видимо не внимателmyj прочёл, такое использование не сомнительно, ведь приработе с VCL всё нормально и не возникает никаких ошибок. Видимо в VCL используется какая-то директива.
Да и ещё, если для S выделять память динамически, то и в KOL всё работает.


 
nicesc   (2005-01-15 12:56) [3]

chum
Меня раньше этот вопрос тоже интересовал

if self_ <> nil then
     Result := self_.WndProc( M ) // Падаем тут
  else
  if Assigned( Applet ) then
     Result := Applet.WndProc( M )
  else
     Result := DefWindowProc( W, Msg, wParam, lParam );
{$IFDEF DEBUG_ENDSESSION}

Посмотрел в отладчике, проблема со стэком:
Должно быть после
004037F8  |. 8B45 F8  MOV EAX,[DWORD SS:EBP-8]
004037FB  |. 8B08     MOV ECX,[DWORD DS:EAX]
ECX=0040301C
а на деле в ЕСХ лежит начало строки, то есть 4 байта строки
ЕСХ=65657165 (eeqe)

Дело в том, что полсе присваивания:
s[1]:="q";
delphi вызывает ф-ию, для дополнительной обработки переменной(PChar), народ поясните на кой?


 
RA ©   (2005-01-17 11:05) [4]

Да, у меня проблема с PChar тоже была. Я вроде делал так:
var S:array [0..1023] of char
По-сути дела тот же PChar, но так вроде лучше. И в конце надо будет самому добавлять chr(0). Проблем с присвоением S[1]:="q" не будет.


 
Gleb   (2005-01-17 11:53) [5]

2 RA
Imho, Pchar - указатель, занимает в памяти 4 байта.
Объявление var S:array [0..1023] of char резервирует в памяти 1Кбайт, поэтому, говорить, что это тот же PChar - некорректно.


 
thaddy   (2005-01-17 19:40) [6]

S:String;
Cast it to Pchar, if needed use setlength.



Страницы: 1 вся ветка

Текущий архив: 2005.08.21;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.034 c
14-1122449894
sagsoft
2005-07-27 11:38
2005.08.21
Ваше представление о Казахстне


1-1122615127
JetMan
2005-07-29 09:32
2005.08.21
Отобразить XML в виде дерева


1-1123000525
deamon_t
2005-08-02 20:35
2005.08.21
Вызов функции


4-1119958510
Pearled
2005-06-28 15:35
2005.08.21
Установка разрешений доступа к какталогу


1-1122906825
Starcom
2005-08-01 18:33
2005.08.21
Как в приложении вызвать процедуру для вывода изображения из RES