Mobile:NEWS 2003年10月31日 10:42 PM 更新

BREW プログラミング入門(2)
“HelloWorld”プログラムを作ろう(2/3)


前のページ

BREWプロジェクトの作成

 それではBREWモジュールのプロジェクトを作成しましょう。

1)Visual C++ 6を起動します。

2) メニューの [ファイル]-[新規作成] を選択し、[新規作成] ダイアログの [プロジェクト] タブを開きます。BREW SDKが正しくインストールされていれば、プロジェクトの種類に [BREW Application Wizard] という項目があるはずです。これを選択します。

3) [プロジェクト名] に "HelloWorld" と入力します。[位置] にプロジェクトを格納するフォルダを入力します。[OK] を押します。


4)ウィザードの [ステップ 1/2] では、BREWアプリケーションで使用する機能を選択します。以下のような機能があります。

項目名機能
Fileファイル入出力機能
Networkネットワーク通信機能
Databaseデータベース機能
TAPI/SMS電話制御/ショート メッセージ機能
Soundサウンド機能

 これらの機能を選択すると、自動生成されるソースコードにこれらの機能を提供するAPIのヘッダーファイルがインクルードされます。あとからソースコードに手動でインクルードできるので、必ずしも今の段階で指定する必要はなく、また実際に使わない機能を選択しても特に害はありません。

 今回は "Hello World" と表示するだけの単純なアプリケーションですので、いずれの機能も使用しません。何も選択せずに [次へ] ボタンを押しましょう。


5)ウィザードの [ステップ 2/2] では、中央にある [MIF Editor] というボタンを押すことで、MIFエディタが起動し、MIFファイルを作成することができます。

 MIFファイルは既に作成したので、ここではなにもせずに [終了] ボタンを押すことにしましょう。


6)これでウィザードが終わりました。最後に [新規プロジェクト情報] ダイアログが表示されるので、[OK] ボタンを押しましょう。

 これでBREWプロジェクトが作成されました。

BREWプロジェクトの内容

 BREWアプリケーション ウィザードが生成したファイルを調べてみましょう。Visual C++の左側の [FileView] タブを見ると、三つのファイルがプロジェクトに追加されているはずです。

  • AEEAppGen.c
  • AEEModGen.c
  • HelloWorld.c


BREW Application Wizardで生成されたファイル

 まずAEEAppGen.c と AEEModGen.cですが、このファイルの中身を知る必要はあまりありません。また、このファイルを編集してはいけません。

 [FileView] の AEEAppGen.cを右クリックして、メニューから [プロパティ] を選択してみてください。[コピー元 ファイル プロパティ] ダイアログの[ファイル名] が "C:\Program Files\BREW SDK v2.1.1 Ja\src\AEEAppGen.c"のようになっており、BREW SDKをインストールしたフォルダ内にあることが分かります。

 つまり、この二つのファイルは、BREWアプリケーション ウィザードで生成した複数のBREWプロジェクトから共有されるソースコードですので、不用意に編集してはいけないのです。

 開発者が編集できるのは HelloWorld.c だけです。ここにHelloWorldアプレットの実装を記述します。[FileView] で HelloWorld.c をダブルクリックして、このファイルを開いてみましょう。

 何やらごちゃごちゃと英語でコメントが書いてあるのが分かります。英語のコメントを削除したものを以下に示します。

// // HelloWorld.c //

#include "AEEModGen.h" // 常にインクルードします #include "AEEAppGen.h" // 常にインクルードします #include "AEEShell.h" // シェル インターフェイス

// 前方宣言 static boolean HelloWorld_HandleEvent( IApplet * pi, AEEEvent eCode, uint16 wParam, uint32 dwParam);

// // ユーザーがアプレットを起動要求したときに、呼び出されます。 // 開発者は指定されたクラス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: // ここにコードを追加します。 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() 関数が使用されています。


BREWアプレットの構造

補足:生成されたコードではBREWアプレットのデータ構造体としてAEEAppletを使用していますが、これは (ある規則に従った) 任意の構造体に置き換えることができます。今回のHelloWorldアプレットではAEEAppletをそのまま使うことにします。

BREWアプレットの作成

 ユーザーが携帯電話のBREWアプレットの一覧からアイコンを選択して起動すると、BREW実行環境は、AEEClsCreateInstance() 関数を呼び出してBREWアプレットを作成するように要求します。

 AEEClsCreateInstance() 関数では、要求されたBREWアプレット構造体を作成して返す必要があります。一つのBREWモジュールには複数のBREWアプレットを含めることができるため、個々のBREWアプレットを区別するために、1番目の引数にクラスIDを指定して呼び出してきます。

 AEEClsCreateInstance() 関数に指定されたクラスIDが、あなたが開発しているBREWアプレットに等しい場合にだけ、そのBREWアプレットを作成して返します。

 これを実現しているのが、BREWウィザードが生成した下記のコードです。

// // ユーザーがアプレットを起動要求したときに、呼び出されます。 // 開発者は指定されたクラスIDのBREWアプレットを作成して返すことで、 // BREWアプレットを起動します。 // int AEEClsCreateInstance( AEECLSID ClsId, // クラスID IShell * pIShell, // シェル インターフェイス IModule * po, // モジュール インターフェイス void ** ppObj) // 作成したアプレットを返すポインタ { *ppObj = NULL;

// クラスIDが HelloWorld アプレットのIDに等しい場合、 // HelloWorld アプレット構造体を作成して返します。 if (ClsId == AEECLSID_HELLOWORLD) { if(AEEApplet_New(sizeof(AEEApplet), ClsId, pIShell, po, (IApplet**)ppObj, (AEEHANDLER) HelloWorld_HandleEvent, NULL)) { return AEE_SUCCESS; } } return EFAILED; }

 このコードでは、BREW実行環境がAEECLSID_HELLOWORLDというクラスIDのBREWアプレットを要求してきた場合だけ、アプレット構造体を作成して返しています。

 アプレット構造体の作成は AEEApplet_New() という関数を呼び出すことで行います。この関数は、AEEApplet構造体のメモリを確保し、AEEApplet構造体にイベント ハンドラである HelloWorld_HandleEvent() を結びつけることでアプレット構造体を作成しています。

 そうそう、HelloWorldのクラスIDをソースコードで使用しているため、ソースコードに HelloWorld.bid ファイルをインクルードする必要があります。HelloWorld.c の冒頭に、

#include "HelloWorld.bid"

と書いておいてください。

[倉谷智尋, ITmedia]

Copyright © ITmedia, Inc. All Rights Reserved.

前のページ | 2/3 | 次のページ



モバイルショップ

最新CPU搭載パソコンはドスパラで!!
第3世代インテルCoreプロセッサー搭載PC ドスパラはスピード出荷でお届けします!!

最新スペック搭載ゲームパソコン
高性能でゲームが快適なのは
ドスパラゲームパソコンガレリア!