Цитата:
Сообщение от 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. ИМХО пофиг, как удобней так и делай.