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

21.2. ラッパークラスの作成方法

BREW インターフェースには、以下の 3 種類があります。

  1. ISHELL_CreateInstance 関数でインスタンスを生成するインターフェース
  2. IQI_QueryInterface 関数でインスタンスを生成するインターフェース
  3. 他の BREW インターフェースによってインスタンスを生成するインターフェース

上に挙げたそれぞれの BREW インターフェースの C++ ラッパークラスの実装で異なるのは、 インスタンスの生成方法、つまり NewInstance 関数の部分だけです。

具体的には、以下の通りです。

  1. ISHELL_CreateInstance 関数でインスタンスを生成するインターフェースの場合、 SFBBase::FactoryByCreate 関数を使用して NewInstance 関数を実装します。
  2. IQI_QueryInterface 関数でインスタンスを生成するインターフェースの場合、 SFBBase::FactoryByQuery 関数を使用して NewInstance 関数を実装します。
  3. 他の BREW インターフェースによってインスタンスを生成するインターフェースの場合、 NewInstance 関数を実装する必要はありません。

21.2.1. ISHELL_CreateInstance 関数でインスタンスを生成するインターフェース

IHash インターフェースのラッパークラス SFBHash の作成方法について説明します。

[Tip] IHash インターフェース

IHash インターフェースは、ISHELL_CreateInstance 関数を使用してそのインスタンスを生成するインターフェースです。

ラッパークラスの作成は、ラッパークラスの定義とそのメンバー関数の実装からなります。

21.2.1.1. ラッパークラスの定義

IHash インターフェースのラッパークラス SFBHash を定義します。

IHash インターフェースは IBase インターフェースを継承するので、 SFBHash クラスは IBase インターフェースのラッパークラス SFBBase クラスを継承します。

IHash インターフェースにない SFBHash::NewInstance 関数を追加します。 この関数は スマートポインタで管理される SFBHash クラスのインスタンスを生成するための関数です。

次に、IHash インターフェースの IHASH_GetResult / IHASH_Restart / IHASH_SetKey / IHASH_Update 関数について、 SFBHash::GetResultSFBHash::RestartSFBHash::SetKeySFBHash::Update をラッパークラスのメンバ関数として定義します。

下記の例のように、 いくつかのメンバ関数では、 SFXBuffer などの SophiaFramework UNIVERSE 独自のクラスを引数として渡せるように拡張しています。

例 21.11. SFBHash ラッパークラスの定義

// SFBHash ラッパークラスの定義
#include <SFBWrapper/SFBEnvironment.h.hpp>
#include <AEESecurity.h>
#include <SFBWrapper/SFBBase.h.hpp>
// SFXBuffer クラスの便利な型を自動生成するマクロ
SFMTYPEDEFCLASS(SFXBuffer) 
// SFBHash ラッパークラスの便利な型を自動生成するマクロ
SFMTYPEDEFWRAPPER(SFBHash) 
class SFBHash : public SFBBase { // SFBHash は SFBBase を継承する
    // ラッパークラスのインスタンスのコピーを禁止するマクロ
    SFMSEALWRAPPER(SFBHash) 
    // ラッパークラスの継承関係を記述するマクロ
    SFMWRAPPERINSTANTIATEONE(SFBHash, SFBBase) 
    public:
        static  SFBHashSmp  NewInstance  (AEECLSID id, SFCErrorPtr exception = null);
                SFCError    GetResult    (VoidPtr data, SInt32Ptr size);
                Void        Restart      (Void);
                SFCError    SetKey       (VoidConstPtr key, SInt32 keySize);
                Void        Update       (VoidPtr data, SInt32 dataLength);
                // SophiaFramework UNIVERSE の SFXBuffer クラスを引数として渡せるようにしたメンバ関数    
                SFCError    GetResult    (SFXBufferPtr data);
                SFCError    SetKey       (SFXBufferConstRef key);
                Void        Update       (SFXBufferPtr data);
};
// BREW インターフェースとラッパークラスの型変換の関数を宣言するマクロ
SFMWRAPPERINTERFACECASTDECLARE(SFBHash, IHash)
[Note] IBase インターフェースの関数

IHASH_AddRef / IHASH_Release 関数は IBASE_AddRef / IBASE_Release 関数を継承する関数です。

これらの関数については IHash インターフェースが継承する IBase インターフェースの ラッパークラス SFBBase