DelphiでWin/Macクロスコンパイル

5,673 views
5,608 views

Published on

プログラミング生放送 第18回@大阪(2012/11/3)のセッション資料です。
Delphiの歴史、Delphi XE3でWin/Macクロスコンパイルを行うための入門資料となっています。

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
5,673
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
0
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

DelphiでWin/Macクロスコンパイル

  1. 1. DelphiでWin/Macクロスコンパイル 大場@tworks
  2. 2. 自己紹介• おおばさん @tworks• PFUアプリケーションズでSEやってます• 仕事はiOS/Android/WinRT/WPF/SL5/etc... 何でも屋です
  3. 3. 今日のゴールVisual Sudioを使っているひとがDelphiを使える!(気分になる)
  4. 4. What is Delphi?
  5. 5. Delphi• Borland社生まれのRAD開発ツール• 1995年 Version 1.0誕生• 開発会社の変遷 Borland ↓ Imprise(Borlandの社名変更) ↓ 再びBorlandに社名戻す ↓ Borlandが脱開発ツールへ方向転換、 Embarcaderoへ譲渡 ←今ここ
  6. 6. Do you knowMicrosoft VisualStudio?
  7. 7. Delphi フォーム プロジェ構造 クトマ エディタ ネージャ プロパティ・イ ツールパ ベント レット
  8. 8. VisualStudio 2010 プロジェ フォームエ クトマ ネージャツール ディタパレッ ト プロパ ティ・ イベン ト
  9. 9. DEMO
  10. 10. 共通点多数 Delphi VS2010フォームエディタ ○ ○プロパティ・イベ ○ ○ントプロジェクト ○ ○ツール ○ ○構造 ○
  11. 11. アンダース・ヘルスバーグ氏http://monobook.org/wiki/C_Sharp より引用遙か昔、ボーランド社が売っていたTurbo Pascal、Delphiはアンダース・ヘルスバーグによる洗練された設計と圧倒的なポテンシャルを持っていた。にも関わらずサードパーティ製開発ツールであるがため常に二番手の日陰者であった。(中略)ボーランドをリストラされたほぼ全員がマイクロソフトに再就職し、復讐を誓ったという。そしてDelphiとVisual Component Library (VCL)を魔改造したC#と.NET Frameworkが生まれた。(中略)公開当初のC# 1.x系はDelphiの見た目を変えただけの方言という感じで、標準ライブラリもVCLそのものでバグまで完全移植という代物であったが、当時大流行していたJava風に実行ラインタイムを仮想マシン、メソッドポインタをデリゲートなどと各種用語の呼び名も刷新することで「まるで新しいもの」と思わせた細かいマーケティング戦略(いわゆる「リネーム商法」)も功を奏し、Delphi以前を知らない多くの人はコロッと騙された。
  12. 12. 開発言語?• Delphi...D言語? いいえちがいます• Object Pascal (Delphi言語と比喩されること も)
  13. 13. Object Pascal 文法とか
  14. 14. クラス定義type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { private 宣言 } public { public 宣言 } end;
  15. 15. procedure/begin/endprocedure TForm1.Button1Click(Sender: TObject);begin { 足し算 } ShowMessage(IntToStr(mysum(1, 2)));end;end.• begin - end program のブロックを示します。• begin で開始して end. で終了です。• 「.」はソースの終端を表します。
  16. 16. C#と似ている?unit Unit1;interfaceuses System.SysUtils, System.Types, System.UITypes, System.Rtti, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs;type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { private 宣言 } public { public 宣言 } end;
  17. 17. 置換してみます元 置換unit namespaceuses usingtype class= class(.*) : .*procedure voidbegin {end{;|.} }xxx:yyy yyy xxx
  18. 18. C#っぽくなった?namespace Unit1;interfaceusing System.SysUtils, System.Types, System.UITypes, System.Rtti, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs;class TForm1 : Form1{ TButton Button1 void Button1Click(TObject Sender); private { private 宣言 } public { public 宣言 } }
  19. 19. まるでC#!!本日は脳内置換おすすめ。
  20. 20. ソース構造基本は以下の3つから構成されます。• プロジェクトファイル(.dpr)• リソースファイル(.dfm など)• ユニット(.pas)
  21. 21. プロジェクトファイル(.dpr)program myapp;uses FMX.Forms, アプリケーション Unit1 in Unit1.pas {Form1}; のエントリーポイ{$R *.res} ント。C#のApp.csbegin に近い。 Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run;end.
  22. 22. リソースファイル(.dfm など) Left = 0 Top = 0 Caption = Form1 ClientHeight = 480 ClientWidth = 640 FormFactor.Width = 1920 FormFactor.Height = 1080 FormFactor.Devices = [dkDesktop] object Button1: TButton DisableFocusEffect = False Height = 22.000000000000000000 Position.X = 288.000000000000000000 Position.Y = 224.000000000000000000 Text = Button1 Width = 80.000000000000000000 OnClick = Button1Click end end
  23. 23. ユニット(.pas)unit Unit1;interfaceuses System.SysUtils, System.Types, System.UITypes, System.Rtti, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs;type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { private 宣言 } C#のCodeBehindと public { public 宣言 } end; 同じ位置付け。.dfmvar Form1: TForm1;implementation (フォーム)と対に{$R *.fmx} なる。{$IFDEF MSWINDOWS}function mysum(x: Integer; y: Integer): Integer; stdcall; external mylib.dll;{$ELSE}function mysum(x: Integer; y: Integer): Integer; stdcall; external libmylib.dylib;{$ENDIF}procedure TForm1.Button1Click(Sender: TObject);begin { 足し算 } ShowMessage(IntToStr(mysum(1, 2)));end;end.
  24. 24. Why now Delphi?• IDE一緒やし使い慣れたらすごいよね• C#を知ってたらObject Pascalも出来そう• Delphi XE3はWindows/MacOS Xクロスコ ンパイル!1粒で2度おいしいよ! ※クロスコンパイルはProfessonal Edition以上の機能 http://www.embarcadero.com/jp/products/delphi/product-editions
  25. 25. クロスコンパイルの前に...こんなアプリが作れます
  26. 26. Windows 32bit/64bit
  27. 27. VCLフォームアプリ• Windows Formアプリケーション• 32bit/64bitコンパイラ
  28. 28. VCL Metropolis UIアプリ• フルスクリーンWindowsアプリケーショ ン タッチイベントに対応
  29. 29. DEMO
  30. 30. VCL Metropolis UIアプリWindows 8 Storeアプリではない...
  31. 31. FireMonkey(FMX)新しい Delphi IDE• フレームワーク Object Pascal• プラットフォーム• HD(2D) 共通ランタイム+GUIフレーム• 3D ワーク FireMonkey Direct 2D/3D OpenGL/Quartz Win32/64 MacOS X
  32. 32. FireMonkey HDアプリ TFormTViewPort 3D3Dコントロー HD(2D)コントル ロール
  33. 33. FireMonkey 3Dアプリ TForm3D TLayer3D 3Dコントロー ルHD(2D)コント
  34. 34. FireMonkeyコントロールの特徴 VCL コンテナコントロール 以外は親子になれない FireMonkey どのコントロールでもMicrosoftのWPF 親子関係になれると似ていますね
  35. 35. 本題の FireMonkeyクロスコンパイル
  36. 36. 環境構築(ハード)• クロスコンパイルのために2台のPCが必 要 – Windows機 – Delphi実行用 – Mac OS X機 – Mac OS X実行環境用 – 上記が同一ネットワークセグメントに居るこ と ※仮想環境でも可 192.168.1.101 192.168.1.1 192.168.1.102
  37. 37. 環境構築(ソフト)• Mac OX X機にXcodeをインストール https://itunes.apple.com/jp/app/xcode/id497799835? mt=12• Mac OS X機にプラットフォームアシスタント (PAServer)をインストール• C:Program Files (x86)EmbarcaderoRAD Studio10.0PAServersetup_paserver.zip• Mac OS X機のPAServerを起動• ~/Applications/Embarcadero/RADPAServer/10.0/paserver
  38. 38. プロジェクト設定 • ターゲットプラット フォームに「OS X」を追 加 • 「プロファイル プロパ ティ」のホスト名に、 PAServerを実行している Mac OS X機のIPアドレス を設定
  39. 39. DEMO
  40. 40. Windows/Mac OS Xの分岐• ダイナミックライブラリ(*.dll / lib*.dylib)の命名がプラットフォームによ り異なる• こういうとき...?
  41. 41. DEMO
  42. 42. クロス環境でDynamic Libraryの注意• コンパイラ指定でライブラリ指定 {$IFDEF MSWINDOWS} function mysum(x: Integer; y: Integer): Integer; stdcall; external mylib.dll; {$ELSE} function mysum(x: Integer; y: Integer): Integer; stdcall; external libmylib.dylib; {$ENDIF}• Mac OS Xは「配置」を使ってライブラリを Contents/MacOS の下にバンドルしましょう
  43. 43. Delphi今後のロードマップ
  44. 44. FireMonkey Delphi IDE Object Pascal共通ランタイム+GUIフレーム ワーク FireMonkeyDirect 2D/3D OpenGL/Quartz OpenGL/ES Win32/64iOS/AndroidMacOS X
  45. 45. まとめ(所感)• VisualStudioに慣れている人なら、Delphiも 扱える(よね?)• DelphiのFireMonkey(FMX) FMXの攻略=Win/Mac/iOS/Androidを制覇• Object PascalはC#の親戚 こわくないよ PascalどーしてもダメならC++Builderもある よ
  46. 46. ご清聴ありがとうございまし た

×