Delphi в мире Юникода


Использование преобразований к PChar() для работы с указателями при указании на не символьные типы


В предыдущих версиях не все типизированные указатели поддерживали арифметические операции. Из-за этого для выполнения арифметических операций над такими указателями они преобразовывались к PChar. В Delphi 2009 арифметика для указателей может быть включена директивой компилятора и она специально включена для типа PByte. Таким образом, если у Вас есть подобный код, преобразующий указатель к PChar для выполнения арифметических операций над ним:  function TCustomVirtualStringTree.InternalData(Node: PVirtualNode): Pointer;  begin    if (Node = FRoot) or (Node = nil) then      Result := nil    else      Result := PChar(Node) + FInternalDataOffset;  end; Вы должны заменить его использованием PByte вместо PChar:  function TCustomVirtualStringTree.InternalData(Node: PVirtualNode): Pointer;  begin    if (Node = FRoot) or (Node = nil) then      Result := nil    else      Result := PByte(Node) + FInternalDataOffset;  end;

В приведенном выше куске кода Node не содержит символьных данных. Он преобразовывается к PChar только для доступа к данным, расположенным через заданное число байт после Node. Раньше это работало, так как SizeOf(Char) = SizeOf(Byte). Теперь это работать не будет. Чтобы сделать работу кода правильной, следует использовать PByte вместо PChar. Если оставить все без изменений, Result будет указывать на некорректные данные.




Начало  Назад  Вперед



Книжный магазин