17Th
Developer Camp

【S4】 テクニカルセッション「Delphi/C++Builder XE徹底活用～新規開発から移行プロジェクトまで」

エンバカデロ・テクノロジーズ
エヴァンジェリスト
高橋智宏
1アジェンダ

Windows 7 (マルチタッチ)
すべてのOS (ジェスチャー)
Webサービス開発 (SOAP/DataSnap)
品質を強化するツール
プロファイラ: AQtime Standard ロギングツール: CodeSite Express

Subversionクライアント機能UnicodeStringへの対応
BDE から dbExpress(or DataSnap)
2Windows 7 （マルチタッチ）
マウス

タッチパッドペン

指(1本)

指(2本以上)ベーシックタッチ
ジェスチャーマルチタッチ(※)(※) Windows 7, Windows Server 2008 R2 のみ

3

実際にマルチタッチイベントを捕捉すると• 例:ズームigiZoom(ズームコマンド)
ズームの中心点
2本の指の距離4

すべてのOS （ジェスチャー）
マウス

タッチパッドペン

指(1本)

指(2本以上)

ベーシック
タッチ
ジェスチャ
ーマルチタッチ5

ジェスチャープログラミング

Demo• マウス(or タッチパッド,ペン,1本指)をドラッグした軌道の形状に応じたイベントを記述できる– ただし、一筆書きで!!
– TGestureManager• 標準ジェスチャー(30種類)• カスタムジェスチャー
– TControlクラスの派生クラスすべて• Touchプロパティのの中のGestureManagerプロパティ• イベントハンドラの書き方– TControlクラスのOnGestureイベント• TGestureEventInfo– GestureID– Location• Gestures.GestureToIdent• TGestureManager.FindCustomGesture#DisplayName– アクションのOnExecuteイベント
6

Webサービス開発 － SOAP

Demo

• SOAPサーバの実装タイプに、Indyベースの単体サーバが追加されました– 従来は、ISAPIのDLL または CGIのEXE のみ– IndyベースのVCLフォームアプリ, Indyベースのコンソールアプリ– Delphi, C++Builderの双方で作成可能• SOAPサーバのデバッグが簡単に行えます7

Webサービス開発 － DataSnap

Demo• HTTP/REST/JSONサーバを実装できるようになりました– Delphi,C++Builderのサーバーメソッドをクライアントから呼び出せます!!
– RESTのサーバメソッドをテストできるHTMLページ(JavaScriptファイル群も自動生成!!)も用意されます8プロファイラ － AQtime StandardDemo• パフォーマンスプロファイラ– 呼び出し時間– 呼び出し回数– コールグラフ• メモリリークの検出• リソースリークの検出– GDIリソースなど• ソースコードカバレッジ
etc…

9ロギングツール － CodeSite ExpressDemo• ロギング用ライブラリ と ログビューワ• ログデータのファイルへの保存
procedure TSortThread.VisualSwap(A, B, I, J: Integer);
begin
CodeSite.Send(CodeSiteLogging.csmInfo, 'ログの文字列です', Self);end;EnterMethod
ExitMethodによる
CallStack情報10

Subversionクライアント機能の統合

Demo• IDEにSubversionクライアント機能を内包– 別途Subversionクライアント/サーバーをインストールすることも可能• サンプルプロジェクト群は、Sourceforgeにホストされている

11

旧バージョンからの移行 － その１

Unicode文字列への対応

12

UnciodeString型の導入 － 2009,2010,XE• 「string型」はこれまで新しいデータ型「UnicodeString型」にマップされるようになった– C++Builder(Delphi)では、VCLの文字列プロパティ(TLabelのCaption等)にアクセスすると、UnicodeString型が返ってくるようになった– もし、従来のstring型(AnsiString型)を使い続けたいコードがあれば、その宣言を明示的にAnsiString型に置き換えてください– 文字列の内部表現には「UTF-16」を採用している• Delphiの「Char型/PChar型」は従来からある「WideChar型/PWideChar型」にマップされるようになった– もし、従来の(P)AnsiChar型を使い続けたい場合は、明示的にAnsiChar型/PAnsiChar型に置き換えてください13

Delphi – 文字列に対するFillCharを避ける• 文字列の後半にゴミが残る！？
var
str: string;
begin
str := 'here comes a string';
FillChar(str[1], Length(str), 0);• 文字列を満たす目的では、StringOfCharを使用する
または• ゼロで埋めるなら、正しいバイト数を計算する
var
str: string;
begin
str := 'here comes a string';
FillChar(str[1], Length(str) * StringElementSize(str), 0);
14

Win32 API, AnsiString, UnicodeString etc…
• Delphi/C++Builderとも、UnicodeString型とAnsiString型との間のデータ変換による損失に気を付ける– Delphiプロジェクト゛は、すべての文字列変換警告を有効にし、さらに警告をエラーとして扱うオプションを有効にすべき• Delphi– デフォルトはW版のWin32 APIを呼び出す• C++Builder– デフォルトはW版のWin32 APIを呼び出す• ただし、プロジェクトオプションでA版とW版の切り替えが可能– UnicodeStringクラスの c_str(), t_str() の戻り値に気を付ける!!
• XEでは、常に wchar_t* が戻る

15

旧バージョンからの移行 – その２

BDEの代替案

16

保守しにくいBDE• クライアントの構成管理がとても面倒• Unicodeは非対応
etc…
クライアントアプリケーション
BDEのエリアス設定が必須

BDE
Oracle用SQL-Linkドライバ

BDE対応のインストーラ作成が必須
複数バージョンのBDE混在は×

Oracleクライアントライブラリ
oci.dllなど

tnsnames.ora
17

Oracleクライアントのインストールが必須
設定が必須

17

dbExpress

Demo• クライアントの構成がとてもシンプル• サードパーティ製（無償・有償）のドライバも利用可能!!
Pro版(ローカル接続のみ)

Ent版/Arc版

Unicode対応○(5.1のlibmysql.dllを使用)○(5.1のlibmysql.dllを使用)○

InterBase XE, 2009, 2007, 7.5.1

○

○

○

Blackfish SQL(.NET/Java)

××○(RAD Studio2007/2009/2010)

Firebird 2.1, 1.5

△

○

○

Oracle 11g, 10g

×

○

○

DB2 9.5, 9.1 Update!

×

○

×

MS SQL Server 2008,2005,2000

×○(2008のクライアントライブラリを使用)○

SQL Anywhere 11, 10, 9 Update!

×○○(11のみ)Sybase ASE 12.5

×

○

×

Informix 9.x

×

○

×

MySQL 5.1, 5.018

DemoDataSnapサーバー ＆ クライアント• RDBMSにはクライアントからは直接接続しない– クライアントはRDBMSに依存しなくなる!!
GUI, 業務ロジック
SQL文 etc…

BDE etc…

GUIアプリドライバ

業務ロジック
SQL文 etc…

GUI
TCP/IP
orHTTP

DataSnap
プロトコル

DataSnapサーバ

等
dbExpress

DataSnap

クライアント

RDBMS

ドライバ

RDBMS
19

17Th
Developer Camp

Q&A

20