More Related Content Similar to DelphiでWin/Macクロスコンパイル (20) More from Tomonori Ohba (11) DelphiでWin/Macクロスコンパイル7. Delphi
フォーム プロジェ
構造 クトマ
エディタ ネージャ
プロパ
ティ・イ ツールパ
ベント レット
10. 共通点多数
Delphi VS2010
フォームエディタ ○ ○
プロパティ・イベ ○ ○
ント
プロジェクト ○ ○
ツール ○ ○
構造 ○
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以前を知らない多くの人はコロッと騙された。
14. クラス定義
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ private 宣言 }
public
{ public 宣言 }
end;
16. C#と似ている?
unit Unit1;
interface
uses
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. 置換してみます
元 置換
unit namespace
uses using
type class
= class(.*) : .*
procedure void
begin {
end{;|.} }
xxx:yyy yyy xxx
18. C#っぽくなった?
namespace Unit1;
interface
using
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 宣言 }
}
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. ユニット(.pas)
unit Unit1;
interface
uses
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;
同じ位置付け。.dfm
var
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. 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
31. FireMonkey(FMX)
新しい Delphi IDE
• フレームワーク Object Pascal
• プラットフォーム
• HD(2D) 共通ランタイム+GUIフレーム
• 3D ワーク
FireMonkey
Direct 2D/3D OpenGL/Quartz
Win32/64 MacOS X
34. FireMonkeyコントロールの特徴
VCL
コンテナコントロール
以外は親子になれない
FireMonkey
どのコントロールでも
MicrosoftのWPF 親子関係になれる
と似ていますね
36. 環境構築(ハード)
• クロスコンパイルのために2台のPCが必
要
– Windows機 – Delphi実行用
– Mac OS X機 – Mac OS X実行環境用
– 上記が同一ネットワークセグメントに居るこ
と
※仮想環境でも可
192.168.1.101 192.168.1.1 192.168.1.102
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. プロジェクト設定
• ターゲットプラット
フォームに「OS X」を追
加
• 「プロファイル プロパ
ティ」のホスト名に、
PAServerを実行している
Mac OS X機のIPアドレス
を設定
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 の下にバンドルしましょう
45. FireMonkey
Delphi IDE
Object Pascal
共通ランタイム+GUIフレーム
ワーク
FireMonkey
Direct 2D/3D OpenGL/Quartz
OpenGL/ES
Win32/64iOS/AndroidMacOS X