Создание кроссплатформенных приложений

cross-platformДобрый день. hi  Сегодня я попытаюсь познакомить вас с одним из главных преимуществ среды разработки Lazarus: создание кроссплатформенных приложений. Чтобы создавать кроссплатформенные приложения, мы должны писать код который сможет работать как среде Windows, так и в Linux(например), т.е. мы должны избежать использование тех процедур и функций которые жестко привязаны к определенной ОС.

Приведу пример: Для того чтобы запустить выполнение программы(Возьмем за основу калькулятор) в Windows, мы можем использовать след. код:

uses ShellApi;

procedure TForm1.Button1Click(Sender: TObject);
begin
   ShellExecute(0,nil, PChar('calc.exe'),nil,nil,1);
end;

Данный код будет работать только для Windows, не только потому что в Linux за калькулятор отвечает другое приложение, но и потому что библиотека ShellApi доступна только из Windows.

В Linux же для того чтобы вызвать калькулятор нам потребуется выполнить следующую команду:

uses Unix;

procedure TForm1.Button1Click(Sender: TObject);
begin
  fpSystem('kcalc');
end;

Данный код так же можно выполнить только в ОС Linux.

Есть процедуры и функции которые могут работать в любой ОС, т.е. кросплатформенные. Для запуска приложений например, нам поможет следующая процедура: TProcess или RunCommand.

Но возникает вопрос, как запустить тот же калькулятор если в разных ОС его выполняет разные приложения? Для этого нам поможет использование директивы «{$IFDEF}» и «{$ENDIF}».

Пример взятый с wiki:

 {...}
   AProcess:TProcess.Create(nil)
   {$IFDEF WIN32}
   AProcess.CommandLine := 'calc.exe'; //Windows калькулятор
   {$ENDIF}
   {$IFDEF LINUX}
   AProcess.CommandLine := 'kcalc'; //KDE калькулятор
   {$ENDIF}
   AProcess.Execute; //как альтернативу, вы можете использовать AProcess.Active:=True
 {...}

Теперь при компиляции вашего приложения под определенную ОС выбранную в параметрах проекта, компилятор будет использовать свой блок кода.

Создание кроссплатформенных приложений обновлено: 22 февраля, 2017 автором: Oleg E.
Share

Добавить комментарий

Ваш адрес email не будет опубликован.