SlideShare a Scribd company logo
DelphiでWin/Mac
クロスコンパイル
    大場@tworks
自己紹介
• おおばさん @tworks
• PFUアプリケーションズでSEやってます
• 仕事はiOS/Android/WinRT/WPF/SL5/etc...
  何でも屋です
今日のゴール

Visual Sudioを使ってい
るひとがDelphiを使え
る!
(気分になる)
What is Delphi?
Delphi
• Borland社生まれのRAD開発ツール
• 1995年 Version 1.0誕生
• 開発会社の変遷
  Borland
       ↓
  Imprise(Borlandの社名変更)
       ↓
  再びBorlandに社名戻す
       ↓
  Borlandが脱開発ツールへ方向転換、
  Embarcaderoへ譲渡 ←今ここ
Do you know
Microsoft VisualStudio?
Delphi


       フォーム     プロジェ
構造               クトマ
       エディタ     ネージャ



 プロパ
ティ・イ            ツールパ
 ベント             レット
VisualStudio 2010

                          プロジェ
       フォームエ               クトマ
                          ネージャ
ツール     ディタ
パレッ
 ト                        プロパ
                          ティ・
                          イベン
                           ト
DEMO
共通点多数
           Delphi   VS2010
フォームエディタ     ○        ○
プロパティ・イベ     ○        ○
ント
プロジェクト       ○        ○
ツール          ○        ○
構造           ○
アンダース・ヘルスバーグ氏
http://monobook.org/wiki/C_Sharp            より引用
遙か昔、ボーランド社が売っていたTurbo Pascal、Delphiはアンダース・ヘルス
バーグによる洗練された設計と圧倒的なポテンシャルを持っていた。にも関わ
らずサードパーティ製開発ツールであるがため常に二番手の日陰者であった。
(中略)
ボーランドをリストラされたほぼ全員がマイクロソフトに再就職し、復讐を
誓ったという。そしてDelphiとVisual Component Library (VCL)を魔改造したC#
と.NET Frameworkが生まれた。
(中略)
公開当初のC# 1.x系はDelphiの見た目を変えただけの方言という感じで、標準ラ
イブラリもVCLそのものでバグまで完全移植という代物であったが、当時大流
行していたJava風に実行ラインタイムを仮想マシン、メソッドポインタをデリ
ゲートなどと各種用語の呼び名も刷新することで「まるで新しいもの」と思わ
せた細かいマーケティング戦略(いわゆる「リネーム商法」)も功を奏し、
Delphi以前を知らない多くの人はコロッと騙された。
開発言語?
• Delphi...D言語?
  いいえちがいます
• Object Pascal
  (Delphi言語と比喩されること
  も)
Object Pascal
 文法とか
クラス定義
type
 TForm1 = class(TForm)
  Button1: TButton;
  procedure Button1Click(Sender: TObject);
 private
  { private 宣言 }
 public
  { public 宣言 }
 end;
procedure/begin/end
procedure TForm1.Button1Click(Sender: TObject);
begin
 { 足し算 }
 ShowMessage(IntToStr(mysum(1, 2)));
end;
end.
• begin - end program のブロックを示します。
• begin で開始して end. で終了です。
• 「.」はソースの終端を表します。
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;
置換してみます
元               置換
unit            namespace
uses            using
type            class
= class(.*)   : .*
procedure       void
begin           {
end{;|.}        }
xxx:yyy         yyy xxx
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 宣言 }
  }
まるでC#!!
本日は脳内置換おすすめ。
ソース構造
基本は以下の3つから構成されます。

• プロジェクトファイル(.dpr)
• リソースファイル(.dfm など)
• ユニット(.pas)
プロジェクトファイル(.dpr)
program myapp;

uses
 FMX.Forms,                      アプリケーション
 Unit1 in 'Unit1.pas' {Form1};
                                 のエントリーポイ
{$R *.res}                       ント。C#のApp.cs
begin                            に近い。
 Application.Initialize;
 Application.CreateForm(TForm1, Form1);
 Application.Run;
end.
リソースファイル(.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
ユニット(.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.
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
クロスコンパイルの前に...
こんなアプリが作れます
Windows 32bit/64bit
VCLフォームアプリ




• Windows Formアプリケーション
• 32bit/64bitコンパイラ
VCL Metropolis UIアプリ




• フルスクリーンWindowsアプリケーショ
  ン
  タッチイベントに対応
DEMO
VCL Metropolis UIアプリ




Windows 8 Storeアプリではない...
FireMonkey(FMX)
新しい           Delphi IDE
• フレームワーク    Object Pascal
• プラットフォーム
• HD(2D) 共通ランタイム+GUIフレーム
• 3D            ワーク
             FireMonkey

       Direct 2D/3D   OpenGL/Quartz

        Win32/64        MacOS X
FireMonkey HDアプリ



              TForm
TViewPort
    3D


3Dコントロー     HD(2D)コント
ル           ロール
FireMonkey 3Dアプリ



              TForm3D
   TLayer3D

                3Dコントロー
                ル
HD(2D)コント
FireMonkeyコントロールの特徴
                VCL
                コンテナコントロール
                以外は親子になれない


                FireMonkey
                どのコントロールでも
MicrosoftのWPF   親子関係になれる
と似ていますね
本題の
  FireMonkey
クロスコンパイル
環境構築(ハード)
• クロスコンパイルのために2台のPCが必
  要
 – Windows機 – Delphi実行用
 – Mac OS X機 – Mac OS X実行環境用
 – 上記が同一ネットワークセグメントに居るこ
   と
 ※仮想環境でも可

     192.168.1.101   192.168.1.1   192.168.1.102
環境構築(ソフト)
• 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
プロジェクト設定
  • ターゲットプラット
    フォームに「OS X」を追
    加
  • 「プロファイル プロパ
    ティ」のホスト名に、
    PAServerを実行している
    Mac OS X機のIPアドレス
    を設定
DEMO
Windows/Mac OS Xの分岐
• ダイナミックライブラリ(*.dll /
  lib*.dylib)の命名がプラットフォームによ
  り異なる
• こういうとき...?
DEMO
クロス環境で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 の下にバンドルしましょう
Delphi
今後のロードマップ
DelphiでWin/Macクロスコンパイル
FireMonkey
           Delphi IDE
         Object Pascal

共通ランタイム+GUIフレーム
       ワーク
    FireMonkey

Direct 2D/3D        OpenGL/Quartz
            OpenGL/ES

 Win32/64iOS/AndroidMacOS X
まとめ(所感)
• VisualStudioに慣れている人なら、Delphiも
  扱える(よね?)
• DelphiのFireMonkey(FMX)
  FMXの攻略=Win/Mac/iOS/Androidを制覇
• Object PascalはC#の親戚
  こわくないよ
  PascalどーしてもダメならC++Builderもある
  よ
ご清聴ありがとうございまし
      た

More Related Content

PDF
Good Parts of PHP and the UNIX Philosophy
PDF
シェル入門
PDF
「FireMonkeyの仕組み」
PDF
「基礎から学ぶビジュアルAndroidアプリ開発。今日からあなたもAndroidデベロッパー」
PDF
「開発者が知りたいDelphi実践テクニック!明日から使えるテクニック集」
PDF
Delphi Debut Tokyo #1 - FireMonkey HD の基本
PDF
CROSS 2015 モバイル開発環境セッション
PDF
Delphi のひみつ!(2015/01/29 CROSS 2015)
Good Parts of PHP and the UNIX Philosophy
シェル入門
「FireMonkeyの仕組み」
「基礎から学ぶビジュアルAndroidアプリ開発。今日からあなたもAndroidデベロッパー」
「開発者が知りたいDelphi実践テクニック!明日から使えるテクニック集」
Delphi Debut Tokyo #1 - FireMonkey HD の基本
CROSS 2015 モバイル開発環境セッション
Delphi のひみつ!(2015/01/29 CROSS 2015)

Similar to DelphiでWin/Macクロスコンパイル (20)

PDF
Sencha & Delphi Ready Studiy
PPTX
RAD Studioで始めるマルチデバイス・クロスプラットフォーム開発ワークショップ
PDF
Delphi Community Edition Meet up !
PPTX
Webセミナー「RAD Studio 10.1 Berlin Update 2 Anniversary Edition 新機能ガイド」
PDF
CLRの基礎 - プログラミング .NET Framework 第3版 読書会
PDF
【16-D-4】3分ではじめるスマホアプリのビジュアル開発
PDF
ソースコードの共通化
PPTX
DELPHI BOOT CAMP / DELPHIでビジュアル開発に挑戦しよう ◆ DAY2: DELPHIでUI設計のポイントを学ぼう
PPTX
デブサミ2008 .NETの仕組み
PDF
Delphi Countdown
PPTX
C#の書き方
PPTX
C#の書き方
PPTX
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第1回 ‟シューティングゲームのプロ...
PDF
デブサミ2013 【15-B-2】iOS/Android向け開発をビジュアルに!
PPT
20010127
PDF
PFI Seminar 2010/02/18
PPT
20050903
PDF
詳解Dexファイルフォーマット
PPTX
DELPHI BOOT CAMP / DELPHIでビジュアル開発に挑戦しよう ◆ DAY1: Delphiで作るはじめてのアプリケーション
PDF
C# を使い倒す!クロス プラットフォーム アプリ開発とクラウド連携の新潮流 - Xamarin セッション
Sencha & Delphi Ready Studiy
RAD Studioで始めるマルチデバイス・クロスプラットフォーム開発ワークショップ
Delphi Community Edition Meet up !
Webセミナー「RAD Studio 10.1 Berlin Update 2 Anniversary Edition 新機能ガイド」
CLRの基礎 - プログラミング .NET Framework 第3版 読書会
【16-D-4】3分ではじめるスマホアプリのビジュアル開発
ソースコードの共通化
DELPHI BOOT CAMP / DELPHIでビジュアル開発に挑戦しよう ◆ DAY2: DELPHIでUI設計のポイントを学ぼう
デブサミ2008 .NETの仕組み
Delphi Countdown
C#の書き方
C#の書き方
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第1回 ‟シューティングゲームのプロ...
デブサミ2013 【15-B-2】iOS/Android向け開発をビジュアルに!
20010127
PFI Seminar 2010/02/18
20050903
詳解Dexファイルフォーマット
DELPHI BOOT CAMP / DELPHIでビジュアル開発に挑戦しよう ◆ DAY1: Delphiで作るはじめてのアプリケーション
C# を使い倒す!クロス プラットフォーム アプリ開発とクラウド連携の新潮流 - Xamarin セッション
Ad

More from Tomonori Ohba (11)

PPTX
Android-Binding Before/After (Hokuriku,NET)
PPTX
Android-Binding Before / After
PPTX
Windows Store App HTTP通信を振り返る
PPTX
スマートフォン勉強会関西#16(iOS,Android,WP7マルチタッチ)
PPTX
楽しいアプリ制作の会 #12 Windows Phone 開発
PPTX
WindowsPhone arch 神戸#1
PPTX
Sencha TouchでHTML5アプリを作ってみる
PPTX
わんくま大阪47 LT
PDF
iOS/Android/WP7アプリ開発比較
PDF
iOSの審査なんてくそくらえさ!
PDF
Sencha Touchをさわってみた
Android-Binding Before/After (Hokuriku,NET)
Android-Binding Before / After
Windows Store App HTTP通信を振り返る
スマートフォン勉強会関西#16(iOS,Android,WP7マルチタッチ)
楽しいアプリ制作の会 #12 Windows Phone 開発
WindowsPhone arch 神戸#1
Sencha TouchでHTML5アプリを作ってみる
わんくま大阪47 LT
iOS/Android/WP7アプリ開発比較
iOSの審査なんてくそくらえさ!
Sencha Touchをさわってみた
Ad

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