前のページ次のページ上に戻るホーム BREW C++ ライブラリ & GUI フレームワーク & XML ミドルウェア : SophiaFramework UNIVERSE 5.0

20.3. コールバック関数

BREW インターフェース ラッパーで使用するコールバック関数は、独自に宣言・実装・登録する必要があります。

以下のサンプル コードのように、ダミーのコールバック関数を経由して、実際のコールバック関数を呼び出します。

[Note] コールバック関数を登録する関数のプロトタイプ

コールバック関数を登録する関数のプロトタイプは、BREW インターフェース ラッパーによって異なります。

詳細情報 : 「 BREW API リファレンス 」

例 20.6. SFBCamera クラスのコールバック関数の宣言・実装・登録


SFMTYPEDEFCLASS(Camera)
class Camera {
SFMSEALCOPY(Camera)

private:
    SFBCameraSmp _camera;      // ICamera インターフェースのラッパークラス

public:
    SFCError Resume(Void);                      // レジューム処理
    static Void OnCameraSHP(VoidPtr reference, AEECameraNotify* notify);    // ダミーのコールバック関数
    Void OnCamera(AEECameraNotify* notify);     // 実際のコールバック関数
};

#endif

// レジューム処理: カメラの基本的な初期化処理
SFCError Camera::Resume(Void)
{
    SFCError error(SFERR_NO_ERROR);
 
    // カメラのインスタンスを取得する
    if ((_camera = SFBCamera::NewInstance()) != null) {     
    
        // ダミーのコールバック関数を登録する
        error = _camera->RegisterNotify(OnCameraSHP, this); 
        
        if (error == SFERR_NO_ERROR) {

            ...

        }
        
    // カメラのインスタンスを取得できなかった場合
    } else {
    
        error = SFERR_NO_MEMORY;   
    }
    
    if (error != SFERR_NO_ERROR) {
       // エラー処理
    }
    return error;
}

// ダミーのコールバック関数
Void Camera::OnCameraSHP(VoidPtr reference, AEECameraNotify* notify)
{
    // 実際のコールバック関数を呼び出す
    static_cast<CameraPtr>(reference)->OnCamera(notify); 
    return;
}

// 実際のコールバック関数
Void Camera::OnCamera(AEECameraNotify* notify)
{
    switch (notify->nStatus) {
        case CAM_STATUS_START:  // カメラの起動が完了したとき
            ...
            break;
        case CAM_STATUS_FRAME:  // 新たなフレームを取得したとき
            ...
            break;
        case CAM_STATUS_DONE:   // 処理が完了したとき
            ...
            break;
        case CAM_STATUS_FAIL:   // 処理が失敗したとき
            ...
            break;
        case CAM_STATUS_ABORT:  // 処理を中止したとき
            ...
            break;
    }
    return;
}