Операционные системы Windows и Linux имеют достаточно серьезных различий, чтобы сделать кроссплатформенную разработку делом сложным и кропотливым. В первую очередь необходимо хорошо знать обе операционные системы и иметь опыт работы с ними.
Очевидно, что создание исходного кода для кроссплатформенных приложений — это трудоемкий процесс, который усложняется по мере использования специфических возможностей операционных систем. Простейшим путем в данном случае будет применение только стандартных свойств и методов компонентов CLX. Но, к сожалению, такой путь возможен для сравнительно несложных приложений.
К примеру, большинство приложений имеют функции для работы с файлами. Файловые системы Windows и Linux отличаются настолько, что кроссплатформенная реализация любых мало-мальски сложных операций с файлами требует серьезного внимания и усилий.
Linux чувствительна к регистру символов в именах файлов и путях, поэтому не стоит использовать в исходном коде имена файлов напрямую, а при необходимости делать это нужно аккуратно. Во многих компонентах для решения проблемы заглавных и строчных букв можно использовать свойство
property CaseSensitive: Boolean;
После присвоения свойству значения True компонент производит все строковые операции с учетом регистра символов.
Для формирования полного пути файла используйте константы из модуля SysUtils. Это PathDelim (символ разделителя каталогов в пути файла), DriveDelim (символ логического диска), pathsep (символ разделителя между несколькими путями файлов в одной строке).
При работе с текстовыми файлами необходимо помнить о различии управляющих символов в Windows и Linux. Для обозначения конца строки в Windows используются символы CR/LF, а в Linux — только символ LF. В Windows окончание текста определяется символом Ctrl-Z, а в Linux — просто концом файла.
Так как в Linux отсутствует системный реестр, то для сохранения настроек приложения используйте класс TMeminiFile, обеспечивающий сохранение переменных среды в INI-файле.
При создании кроссплатформенных приложений желательно использовать только свойства и методы классов CLX. В библиотеке CLX также доступны для применения такие важные для написания бизнес- логики приложения классы, как TList, TStringList, TCollection, TAction и др.
Если это ограничение является слишком жестким, и в программе требуется использовать функции системных API, применяйте директивы условного перехода:
{$IFDEF MSWINDOWS}
{код для Windows}
{$ENDIF}
{$IFDEF LINUX}
{код для Linux}
{$ENDIF}
Для определения исходного кода Windows применяйте константу MSWINDOWS, и не используйте константу WIN32, т. к. все еще есть код WIN32 и никто не может поручиться, что вам не понадобится константа WIN64 для соответствующего кода.