前のページ次のページ上に戻るホーム SophiaFramework 2.2

7.2. ラッパー クラス

SophiaFramework には BREW のインターフェイス IInterface に対応するラッパー クラス SFBInterface が用意されています。 たとえば、BREW の IDisplay インターフェイスには、 それに対応する SFBDisplay が用意されています。

BREW インターフェースのほぼすべての関数に対して、 対応するラッパーが用意されています。 それに加えて、プログラミングに便利ないくつかの拡張関数も用意しています。 詳細はクラス リファレンスを参照してください。

図 7.1. ラッパー クラス

ラッパー クラス

7.2.1. ラッパー クラスの性能

ラッパー クラスには、BREW API 関数を薄く包み込んだインライン関数と、 BREW API 関数を補完するような拡張された関数の 2 種類の関数が実装されています。

前者の関数は C++ コンパイラが適切に処理する限り コンパイル時にインライン展開されてネイティブの BREW API 呼び出しに変換されますので、速度低下が発生することはありません。

たとえば、BREW API 関数の 1 つである IIMAGE_GetInfo は次のようなプロトタイプを持ちます。

void IIMAGE_GetInfo(IImage * pIImage, AEEImageInfo * pi);

この関数に対応する SFBImage::GetInfo 関数は、 次のようにインライン定義されています。

class SFBImage : public SFBBase {

    ...

    inline  Void GetInfo (AEEImageInfo* pi)
            {
                IIMAGE_GetInfo(reinterpret_brew<IImagePtr>(this), pi);
                return;
            }

};

したがって、この関数をソースコード中で使用しても、 コンパイル段階でネイティブ BREW API 呼び出しに展開されるため、 速度低下は発生しません。

これに対して、BREW API 関数の単なる薄いラッパーではなく、 SophiaFramework で独自に定義した拡張関数も存在します。 たとえば、BREW API 関数 IShell_GetAppCopyright は次のようなプロトタイプを持ちます。

int ISHELL_GetAppCopyright( 
    IShell * pIShell, 
    AECHAR * pBuff, 
    int nSize 
) 

この関数は指定されたサイズをもつバッファに、 アプレットの著作権情報を取得します。 この BREW API 関数に対応するラッパー関数として SFBShell::GetAppCopyright が用意されていますが、 この関数には複数のオーバーロードがあります。

class SFBShell : public SFBBase {
    
    ...
    
    inline  SIntN GetAppCopyright(WCharPtr pBuff, SIntN nSize)
            {
                return(ISHELL_GetAppCopyright(reinterpret_brew<IShellPtr>(this), pBuff, nSize));
            }
            
    SFUWideString GetAppCopyright(SIntN nSize = 256);

};

最初のインライン関数は BREW API 関数の薄いラッパー関数となっており、 速度低下は発生しません。 2 つめのオーバーロード関数ではインライン関数ではなく、 指定されたサイズのバッファを内部的に確保した上で BREW API 関数を呼び出して結果の文字列を SFUWideString として返すように実装されています。 このような関数は、 コンパイル段階で単純な BREW API 関数呼び出しには展開されませんが、 簡易なプログラミングができるという利点があります。

[Note] 注意

SophiaFramework の無料評価版では、 ラッパー クラスの関数はすべて非インライン関数として提供されますので、 ラッパー クラスを使用することにより速度低下が発生します。 しかし、SophiaFramework の製品版では BREW API 関数に対応する関数は すべてインライン関数として提供されるため、 コンパイラがインライン展開を行う限り速度低下は発生しません。

7.2.2. KDDI 拡張インターフェイス

SophiaFramework では KDDI 拡張インターフェイスに対するラッパー クラスも用意しておりますが、標準では使用できないようになっています。 KDDI 拡張インターフェイス IKDDIPhoneSystem および IKDDIPPP のラッパークラスである SFBKDDIPhoneSystem および SFBKDDIPPP を利用するためには、 KDDI の BREW 日本拡張パッケージをお使いの BREW SDK にインストールした上で、 SophiaFramework.hpp ヘッダー ファイルををインクルードする前に、 SFMKDDIEXTENSION マクロを定義します。

#define SFMKDDIEXTENSION
#include <SophiaFramework.hpp>

これで拡張インターフェイスのラッパー クラスが使用可能になります。