コールバック関数の登録方法
BREW インターフェース ラッパーで設定できるコールバック関数は、宣言・実装・登録を独自に行う必要があります。
以下のサンプル コードのように、内部コールバック関数を経由して、実際のコールバック関数を呼び出します。
SFBCamera クラスのコールバック関数の宣言・実装・登録
SFMTYPEDEFCLASS(Camera) class Camera { SFMSEALCOPY(Camera) private: // ICamera インターフェースのラッパークラス SFBCameraSmp _camera; 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; }