Написание
переносимого кода
Для создания кроссплатформенного
приложения следуйте приведенным ниже советам:
PostMessage
и SendMessage
внутри приложения;TMemIniFile
вместо TregIniFile
;System, SysUtils
и других модулях, одинаковых для обеих
платформ. Приведем пример, который
позволяет использовать многобайтные символы для обеих платформ (Windows и Linux).
Среда Windows традиционно сопоставляет только два байта каждому многобайтному
символу. В Linux многобайтная кодировка символов может содержать намного больше
байтов на один символ (до шести байтов в кодировке UTF-8). Обе платформы могут
использовать одинаковую кодировку с помощью функции StrNextChar
,
находящейся в модуле SysUtils
. В листинге 21.2 приведен код для
среды Windows.
Листинг 21.2.Код для
среды Windows
while p^ <>
#0 do
begin
if р^
in LeadBytes then
inc (p)
;
inc(p);
end;
Этот код можно преобразовать
в платформонезависимый, как показано в листинге 21.3.
Листинг 21.3. Платформонезависимый
код
while р^ <>
#0 do
begin
if р^ in LeadBytes then
p := StrNextChar(p)
else
inc(p);
end;
Если использование функций
библиотек не приводит к работающему решению, можно попробовать изолировать специфичный
код в блоки $IFDEF
. Однако постарайтесь ограничить число таких
блоков.