ホーム > デベロッパ > BREW FAQ

BREW FAQ : SophiaFramework

SophiaFramework とは ?

SophiaFramework とは、BREW プラットフォーム上のアプリケーション開発を容易に行うための アプリケーション フレームワークです。 BREW 単体では困難な GUI を利用したアプリケーション (複数ウィンドウの表示など) や C++ を利用したオブジェクト指向ベースの開発、保守が容易に行えます。

SophiaFramework を使う利点をまとめると次のようになります。

  • わずかなコーディングで高度な GUI アプリケーションを構築できます。
  • さまざまなユーティリティ クラスを使って、 すぐにアプリケーションを書くことができます。
  • オブジェクト指向設計により、保守性と拡張性の高いソースコードを書くことができます。

      

BREW で C++ 言語は使用できますか ?

使用できます。 SophiaFramework を使用すると BREW で C++ をベースとしたオブジェクト指向のプログラミングが簡単に行えます。

      

文字列クラスとは ?

文字列クラス とは、文字列操作を簡単に行うための C++ クラスです。 BREW API を使用した C 言語プログラミングでは、このようなクラスが存在しないため、 開発者は文字列ポインタを直接操作する必要があります。
SophiaFramework には、char 文字列を扱う SFXAnsiString クラスと、BREW のワイド文字列を扱う SFXWideString クラスが用意されています。
SophiaFramework の文字列クラスを使用すると、以下の操作を簡単に行えます。

[ BREW API のみを使用したコード ]

//
// BREW API のみを使用した文字列操作
//
AECHAR helloWorld[16] = {0}; int result = 0; int helloLen = 0; int worldLen = 0;
// 文字列を初期化します。 AECHAR hello[] = {'H','e','l','l','o', '\0'}; AECHAR world[] = {'W','o', 'r', 'l', 'd', '\0'};
// 文字列を連結します。 WSTRCAT(helloWorld, hello); WSTRCAT(helloWorld, world);
// 文字列を比較します。 result = WSTRCMP(hello, world); if (result < 0) { DBGPRINTF("*** world is bigger ***"); } else if (0 < result) { DBGPRINTF("*** hello is bigger ***"); } else { DBGPRINTF("*** hello is the same as world ***"); }
// 文字列の長さを取得します。 helloLen = WSTRLEN(hello); worldLen = WSTRLEN(world);

[ SophiaFramework を使用したコード ]

//
// SophiaFramework の文字列クラスを使用した文字列操作
//
SFXWideString helloWorld; SInt32 helloLen = 0; SInt32 worldLen = 0;
// 文字列を初期化します。 SFXWideString hello("Hello"); SFXWideString world("World");
// 文字列を連結します。 helloWorld += hello; helloWorld += world;
// 文字列を比較します。 if (hello < world) { DBGPRINTF("*** world is bigger ***"); } else if (hello > world) { DBGPRINTF("*** hello is bigger ***"); } else { DBGPRINTF("*** hello is the same as world ***"); }
// 文字列の長さを取得します。 helloLen = hello.GetLength(); worldLen = world.GetLength();
      

BREW ラッパー クラスとは ?

SophiaFramework の BREW ラッパー クラス (以下、ラッパー クラス) とは、BREW のインターフェイスを C++ 言語で利用しやすいようにラッピングしたクラスのことです。 ラッパー クラスを使用することで、スマートポインタを使用した参照カウントの自動管理が可能になります。 また、ラッパー クラスには、SophiaFramework 独自の拡張関数も定義されています。

ラッパー クラスのサンプルは、こちらをご覧ください。

スマート ポインタとは ?

      

スマート ポインタとは ?

SophiaFramework の スマート ポインタ とは、BREW インターフェイスのラッパー クラスに対して 参照カウントの管理を自動化する C++ のテンプレートです。

BREW API だけを使用した C 言語プログラミングでは、 インターフェイスの参照カウントの増減を自前で管理する必要がありますが、 スマート ポインタを使用すれば、このような煩雑な管理がすべて自動化されます。

[ BREW API のみを使用したコード ]

//
// BREW API だけでインターフェイスを管理する例
//

// リソース ファイルから読み込むビットマップ画像のリソース ID
#define IDB_MY_PICTURE  0x0001

IShell*   shell = app->a.m_pIShell;
IBitmap*  bmp;

// IBitmap インターフェイスを作成します。
// IBitmap インターフェイスの参照カウントが加算されます。
bmp = ISHELL_LoadResBitmap(shell, MYRESOURCE_RES_FILE, IDB_MY_PICTURE);

// IBitmap インターフェイスを利用した処理
・
・
・

// IBitmap インターフェイスを破棄します。
// IBitmap インターフェイスの参照カウントが減算されます。
IBITMAP_Release(bmp);

[SophiaFramework を使用したコード]

//
// ラッパー クラスとスマート ポインタを使用して、
// インターフェイスを管理する例
//

// リソース ファイルから読み込むビットマップ画像のリソース ID
#define IDB_MY_PICTURE  0x0001

SFBShellSmp   shell = SFBShell::GetInstance();
SFBBitmapSmp  bmp;

// SFBBitmap インスタンスを作成します。
// 自動的に SFBBitmap インスタンスの参照カウントが加算されます。
bmp = shell->LoadResBitmap(MYRESOURCE_RES_FILE, IDB_MY_PICTURE);

// SFBBitmap インスタンスを利用した処理
・
・
・

// SFBBitmapSmp オブジェクトの解放時に
// 自動的に SFBBitmap インスタンスの参照カウントが減算されます。