ホーム > デベロッパ > SophiaFramework > BREW C++ 逆引きコード集

BREW C++ プログラミング : SophiaFramework 逆引き FAQ・コード集

C 言語用 BREW API を利用する方法

SophiaFramework プログラムから C 言語用 BREW API を利用する方法は以下のとおりです。

例 1 : IShell インターフェースの場合

SFBShellSmp xshell;
IShellPtr ishell;

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

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

例 2 : IFileMgr インターフェースの場合

SFBShellSmp shell;
SFBBaseSmp xfilemgr;
IFileMgr* ifilemgr;

// 方法1
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 を明示的に解放する
   }
}