BREW を学ぶ 情報工学科1組 石原 第4 週目 Microsoft Visual Studio.NET 2003 を使って BREW アプリの作成手順を学ぶ
"HelloWorld" プログラムを作る BREW エミュレータで実行する BREW アプリケーションの 実体は.dll ファイルです。これを "BREW モジュール " という。 BREW モジュールには、必ず MIF ファイルが必要で、 HelloWorld.dll モジュールには HelloWorld.mif というファイ ルが 必要になる。 この二つは必ずペアで扱う。 MIF ファイルは BREW モ ジュール に関するメタ情報を記述するためのもの。 画面に "Hello World" と表示する簡単な BREW アプリを作成 する。
BREW アプリケーションを開発に必要な 作業 各 BREW アプレットのクラス ID の作成 各 BREW アプレットの振る舞いの実装 BREW モジュールのメタ情報を記述した MIF ファイルの作成 BREW モジュール (DLL) の作成
MIF ファイルの作成 HelloWorld アプリケーションでは、 HelloWorld.dll と いう BREW モジュールに、 “ HelloWorld ” という名 前 の BREW アプレットを含めることにする。 HelloWorld アプレットのクラス ID は 0x1234 にす る。 これらの BREW モジュールの情報や、そこに含ま れ ているアプレットの情報は、 MIF ファイルに格納 する。 まず MIF ファイルの作成手順を見ていく。
BREW MIF エディタ を起動。 BREW モジュールに一つのアプレットを含め る設定を行う。まず [ アプレット ] タブの [ 新規 アプレット ] ボタンを押す。
[ClassID の生成 ] ダイアログが表示されるので、 [ 名前 ] に “ HelloWorld ” と入力し、 [ ローカル ] ラ ジオボタンを選択する。また [ClassID] に "1234" と入力。
HelloWorld.bid というファイル名で保存。 このファイルに HelloWorld アプレットの クラス ID が格納される。 MIF エディタに戻り、 [ アプレット ] タブの [ClassID] から 0x を選択する。これは HelloWorld アプレットを表すクラス ID 。 アプレットの名前や種類、アイコンを設定する。 [ 名前 ] には “ Hello World ” と入力し、 [ アプレット の種類 ] では “ ツール ” を選択。 HelloWorld.mif というファイル名で保存。
*.bid ファイルの中身 MIF ファイルを作成する途中で.bid ファイルを 作成。このファイルは、 BREW アプレットのク ラス ID を定義した C 言語のヘッダーファイル で、テキストエディタで開いてみると、次のよ うになっていることが分かる。 #define AEECLSID_HELLOWORLD 0x この.bid ファイルは、後で BREW アプレットの 実装を行うときに、ソースコードにインクルー ドすることになる。
BREW プロジェクト (DLL ファイル)の作 成 Microsoft Visual Studio.NET 2003 を起動 。 メニューの [ ファイル ] - [ 新規作成 ] - [ プロジェクト ] を選 択し、 [Visual C++ プロジェクト ] を選択
ウィザードの [ ステップ 1/2] では、 BREW アプリケー ションで使用する機能。以下のような機能がある。 今回は “ Hello World ” と表示するだけの単純なアプリケー ションでいずれの機能も使用しないので、何も選択せず に [Finish] ボタンをクリック。
BREW プロジェクトの内 容 BREW アプリケーション ウィザードが生成した ファイルを調べてみる。 Visual C++ の左側の [FileView] タブを見ると、三つのファイルが プロジェクトに追加されている。 AEEAppGen.c AEEModGen.c HelloWorld.c
* AEEAppGen.c と AEEModGen.c この二つのファイルは、 BREW アプリケーション ウィ ザードで 生成した複数の BREW プロジェクトから共有されるソー ス コードなので、不用意に編集してはいけない。 [FileView] で HelloWorld.c をダブルクリックして、この ファイルを開いてみる。
HelloWorld.c // // ユーザーがアプレットを起動要求したときに、呼び出されます。 // 開発者は指定されたクラス ID の BREW アプレットを作成して返すこ とで、 // BREW アプレットを起動します。 // int AEEClsCreateInstance( AEECLSID ClsId, // クラス ID IShell * pIShell, // シェル インターフェイス IModule * po, // モジュール インターフェイス void ** ppObj) // 作成したアプレットを返すポインタ { *ppObj = NULL; if (ClsId == AEECLSID_HELLOWORLD) { if(AEEApplet_New(sizeof(AEEApplet), ClsId, pIShell, po, (IApplet**)ppObj, (AEEHANDLER) HelloWorld_HandleEvent, NULL)) { return AEE_SUCCESS; } return EFAILED; }
// // HelloWorld アプレットのイベント ハンドラ // static boolean HelloWorld_HandleEvent( IApplet * pi, // アプレット構造体 AEEEvent eCode, // イベント コード uint16 wParam, // イベント パラメータ (16 ビット ) uint32 dwParam) // イベント パラメータ (32 ビット ) { switch (eCode) { case EVT_APP_START: // ここにコードを追加します。 HelloWorld_OnAppStart((AEEApplet*) pi); return TRUE; case EVT_APP_STOP: // ここにコードを追加します。 return TRUE; default: break; } return FALSE; }
BREW ウィザードが生成したコードは、 AEEClsCreateInstance() と HelloWorld_HandleEvent() という二つの関数。 AEEClsCreateInstance() は、ユーザーが BREW アプレット のアイコンを選択して起動したときに呼び出される関数。 開発者はこの関数内で BREW アプレットのデータ構造体 を作成して返す必要がある。 HelloWorld_HandleEvent() は、ユーザーが携帯電話のキー を押したり、アプリを終了させたりなど、さまざまな操 作を行ったときに呼び出される関数。
BREW アプレットの構 造 BREW アプレットは、 “ アプレット構造体 ” と “ イベント ハンドラ ” のペアで構成される。 アプレット構造体とは、 BREW アプレットがデータを 格納するための構造体で、そのアプレットでグローバル に使用する変数などを格納しておく。 BREW ウィザー ドが生成したコードでは、デフォルトで AEEApplet 構造 体が使用されている。 イベント ハンドラとは、 BREW 実行環境からのさまざ まな通知を受け取る関数で、ユーザーがキーを押したと きなどに呼び出される。 BREW ウィザードが生成した コードでは、デフォルトで HelloWorld_HandleEvent() 関 数が使用されている。
画面への描画 // // アプレットが開始したときに呼び出される。 // static void HelloWorld_OnAppStart(AEEApplet* app) { AECHAR text[] = {'H','e','l','l','o',' ','W','o', 'r', 'l', 'd', '\0'}; // 画面ビットマップに文字列を表示する IDISPLAY_DrawText(app->m_pIDisplay, AEE_FONT_BOLD, // 太字のフォント text, // 表示する文字列 -1, // -1 = 文字列をすべて表示する 0, // 無視される NULL, // クリッピングしない IDF_ALIGN_CENTER | IDF_ALIGN_MIDDLE); // 左右中央揃え、上下中央揃 え // 更新された画面ビットマップを表示する IDISPLAY_Update (app->m_pIDisplay); }
BREW エミュレータ用にコンパイル する すべてのファイルを確認。 Helloworld.bid と HelloWorld.mif は 他のファイルと同じ フォルダ内に入れておく。 コンパイルを行うには、 メニューから [ ビルド ] - [ ソリューションのビルド ] を選択。 ソースコードに誤りがなければ、正常にビルドが行われ、 アウトプット ウィンドウに次のようなメッセージが表示される。 HelloWorld.dll - エラー 0 警告 0 HelloWorld プロジェクト フォルダに、 HelloWorld.dll というファイルが作成される。
BREW エミュレータで実行する BREW エミュレータで動作させるためには、 HelloWorld.dll ファイルと HelloWorld.mif ファイルが必要。 この二つのファイルを次のような場所にコピー。 C:\Applet\HelloWorld.mif C:\Applet\HelloWorld\HelloWorld.dll BREW エミュレータを起動。デフォルトでは BREW SDK の Examples フォルダにある BREW アプレットがエミュレータ画面 に表示されるので、エミュレータの読み取るフォルダを C:\Applet に変更する必要がある。 メニューから [ ファイル ] - [ アプレットディレクトリの変更 ] を選択 し、 [ フォルダの参照 ] ダイアログで C:\Applet フォルダを選択 して [OK] を押す。
最初のアイコンを選択した状態で画面に “ Hello World ” というタイト ルが 表示されていれば、 BREW エミュレータが MIF ファイルを認識して いる 証拠。この段階ではアプリケーション本体である.dll は実行されてい ない。 タイトルの "Hello World" というテキストは、 MIF ファイルの [ アプ レット ] タブの [ 名前 ] 項目に入力したものが表示される。 アイコンを選択した状態で Enter を押して、画面中央に太字で “ Hello World ” と表示されれば作成されたことになる。
今後の予定 BREW エミュレータの基本ツールを把握しておく。 また次回までに、 BREW API の基本的な使い方 についてサンプルプログラムを使い、学んでいく。 また、参考書を見て知識を深め、次回以降の オリジナルのアプリを作成するための構想を立て る。
参考資料 株式会社 ソフィア・クレイドル HP