вопрос | ответ |
Заметьте, что SizeOf можно применять только к статическим массивам. Для динамических массивов она всегда возвращает размер указателя (см. статью про у | SetLength(MyCharArray, MAX_PATH + 1); FillChar(MyCharArray[0], Length(MyCharArray) * SizeOf(Char), 0); Для ситуац |
Конечно же, вам нужно быть осторожным с кодом, особенно если этот код использует низко-уровневые подпрограммы типа Move или FillChar (которая теперь п | var Buffer: array[0..MAX_PATH] of Char; begin FillChar(Buffer, MAX_PATH + 1, 0); потому что теп |
SizeOf или Length? | Конечно же, вам нужно быть осторожным с кодом, особенно если этот код использует низко-уровневые подпрограммы типа Move или FillChar (которая теперь п |
Функции Win32 API часто поставляются в двух вариантах: один из которых принимает Ansi (т.е. однобайтовые) символы и (C-) строки, а второй принимает Wi | function GetShortPathName(lpszLongPath: PChar; lpszShortPath: PChar; cchBuffer: DWORD): DWORD; stdcall; {$EXTERNALSYM GetShortPathName} |
Так что же с этим делать? | Как вы можете видеть из текста статьи, я ни разу не делал ссылок на размер Char. Так что всё, что я написал выше, полностью применимо и к Delphi 2009 |
Справка Delphi 2009 так говорит о RawByteString: | RawByteString позволяет передачу строковых данных с любой кодовой страницей без выполнения конвертации данных. Обычно это означает, что параметры подп |
Ещё одним новым типом является RawByteString. | Если вы присвоите AnsiString с одним типом кодировки другой AnsiString с другой кодировкой, то будет выполнена автоматическая конвертация, с потенциал |
Как вы можете видеть из статьи Википедии о UTF-16, | также возможно, что некоторые кодовые позиции UTF-16 требуют нескольких WideChar-ов – так называемых "суррогатных пар" (surrogate pairs). Так что длин |
Кроме того, также было введено несколько вспомогательных типов строк: | RawByteString (= AnsiString($FFFF)) и UTF8String (= AnsiString(65001)) (а также огромного количества любых других пользовательских типов строк на базе |
Кроме длины и счётчика ссылок, | каждый строковый тип данных (т.е. AnsiString и UnicodeString) теперь имеют дополнительные служебные поля: Word, содержащий кодировку (encoding) строки |
Delphi for Win32 уже имела строковый тип WideString (также состоящий из WideChar) | , но это всегда лишь псевдоним для системного типа строк BSTR, используемом в основном в COM. Этот тип управляется ОС (и поэтому является идеальным ср |
В Delphi 2009 строки были значительно изменены. | До Delphi 2009 (т.е. с Delphi 2 по Delphi 2007) строки были, фактически, типом AnsiString, а каждый символ был однобайтовым AnsiChar. Тип PChar был пс |