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

23.1. C 言語用 BREW API を呼び出す方法

SophiaFramework UNIVERSE プログラムから C 言語用 BREW API を呼び出す方法は以下の通りです。

例 23.1. IShell インターフェースの場合

SFBShellSmp xshell;    // IShell インターフェースを管理するスマートポインタ
IShell* ishell;        // Ishell インターフェース

// 方法1
// SFBShell インスタンスを取得する
if ((xshell = SFBShell::GetInstance()) != null) {
    // ishell インターフェースへのポインタを取得する
    ishell = interface_cast(xshell.Get());
    // xshell が有効な間は ishell を利用できる
    // ishell のスコープは xshell のスコープに依存する
}

// 方法2
if ((xshell = SFBShell::GetInstance()) != null) {
   // ishell インターフェースへのポインタを取得する
   ishell = interface_cast(xshell.Detach());
   // ishell の解放権限を xshell から取得する
   // 開発者が ishell を明示的に解放する
   ISHELL_Release(ishell);
}

例 23.2. IFileMgr インターフェースの場合

  
SFBShellSmp shell;     // IShellインターフェースを管理するスマートポインタ
SFBBaseSmp xfilemgr;   // IBase インターフェースを管理するスマートポインタ
IFileMgr* ifilemgr;    // IFileMgr インターフェースのラッパークラス

// 方法1
// SFBShell インスタンスを取得します。
if ((shell = SFBShell::GetInstance()) != null) {

   // IFileMgr インターフェースを作成する
   if ((xfilemgr = shell->CreateInstance(AEECLSID_FILEMGR)) != null) {

      // スマートポインタ クラスから 
      // IFileMgr インターフェースへのポインタを取得する
      ifilemgr = reinterpret_cast<IFileMgr*>(interface_cast(xfilemgr.Get()));

      // IFileMgr インターフェースを利用する
      if (IFILEMGR_Test(ifilemgr, "myfile.txt") == SFERR_NO_ERROR) {
          // ...
      }
      // ifilemgr のスコープは xfilemgr のスコープに依存する
      // スコープを伸ばすには、xfilemgr と ifilemgr をクラス変数にする
   }
}

// 方法2
if ((shell = SFBShell::GetInstance()) != null) {

   // IFileMgr インターフェースを作成する
   if ((xfilemgr = shell->CreateInstance(AEECLSID_FILEMGR)) != null) {

      // スマートポインタ クラスから
      //  IFileMgr インターフェースへのポインタを取得する
      ifilemgr = reinterpret_cast<IFileMgr*>(interface_cast(xfilemgr.Detach()));

      // IFileMgr インターフェースを利用する
      if (IFILEMGR_Test(ifilemgr, "myfile.txt") == SFERR_NO_ERROR) {
         // ...
      }

      IFILEMGR_Release(ifilemgr);
      // ifilemgr のスコープは xfilemgr のスコープに依存しないが、
      // ifilemgr は開発者が管理する
      // IFileMgr インターフェースを利用し終わった時点で 
      // 開発者が ifilemgr を解放する
   }
}