Показать сообщение отдельно
  #17  
Старый 11.01.2016, 12:50
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Цитата:
Сообщение от cadil
Как это условие сформулировать? А вариант работы с циклами не подойдет?
Код:
var
  S: string; 
  I: Integer;
  ch1: Char;
begin
  // Универсальный, вариант 1
  // (работает для любых настроек, 
  // доступен, начиная с Delphi 2006)
  for ch1 in S do
    use(ch1);
 
  // Универсальный, вариант 2
  // (работает для любых настроек, 
  // доступен, начиная с Delphi XE3)
  for I := Low(S) to High(S) do
    use(S[i]);
end;

В чем недостаток {$ZEROBASEDSTRINGS ON}?

Думаю вот такой вариант будет работать:
Код:
{$IF (sizeof(Char)=2)} // для unicode
function COMRead(AHandle: THandle): RawByteString; overload;
function COMWrite(AHandle: THandle; Data: RawByteString): Cardinal; overload;
{$ELSE}
function COMRead(AHandle: THandle): String; overload;
function COMWrite(AHandle: THandle; Data: string): Cardinal; overload;
{$ENDIF}

ну и далее по коду там тоже смотри.

{$ZEROBASEDSTRINGS ON} - это, насколько я понимаю, к данной проблеме никак не относится. Этот ключ определяет с какого индекса начинается строка, с 1 или с 0. ИМХО пофиг, как удобней так и делай.
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием