スライド 1

BREWを学ぶ
Microsoft Visual Studio .NET 2003を使って
BREWアプリの作成手順を学ぶ
情報工学科1組 石原 第4週目
"HelloWorld" プログラムを作る
画面に"Hello World"と表示する簡単なBREWアプリを作成する。
BREW エミュレータで実行する BREW アプリケーションの実体は
.dll ファイルです。これを "BREW モジュール" という。
BREW モジュールには、必ず MIF ファイルが必要で、
HelloWorld.dll モジュールには HelloWorld.mif というファイルが
必要になる。
この二つは必ずペアで扱う。 MIF ファイルは 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]
から 0x00001234 を選択する。これは HelloWorld
アプレットを表すクラス ID 。
 アプレットの名前や種類、アイコンを設定する。
[名前] には “Hello World” と入力し、[アプレットの種
類] では “ツール” を選択。
 HelloWorld.mif というファイル名で保存。

*.bid ファイルの中身
 MIF ファイルを作成する途中で .bid ファイルを作成。
このファイルは、 BREW アプレットのクラス ID を定
義した C 言語のヘッダーファイルで、テキストエディ
タで開いてみると、次のようになっていることが分か
る。
#define AEECLSID_HELLOWORLD 0x00001234

この .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,
// 無視される
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
http://www.s-cradle.com/developer/index.html#brew