Вверх ↑
Ответов: 4631
Рейтинг: 749
#1: 2015-03-31 16:20:28 ЛС | профиль | цитата
Так вроде ж выяснили выше: CharLower не любит строки с 0-вой длиной. Возможно по причине той же константы: при PChar(s) с 0-вой длиной Delphi передаёт в функцию валидный адрес, по которому лежит #00. Этот адрес, вероятно, лежит в области констант. Другие API функции это вполне нормально воспринимают, а вот CharLower может пытаться писать по этому адресу.

Если в последнем случае написать
CharLower(Pointer(s))
то ошибки не будет: в этом случае Delphi передаст не указатель на константный символ #00, а именно 0, как адрес строки. А согласно MSDN, если аргумент CharLower меньше $FFFF (в данном случае 0), то она считает аргумент одним символом, результат преобразования которого и возвратит (не запишет по адресу, так как был передан не адрес, а код символа):
s := Char(CharLower(Pointer(65)));

карма: 26

0