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

BREW C++ プログラミング 逆引きコード集 : 開発環境

C++ で作成されたBREW アプリを作成する際の、Visual Studio などの開発環境のTipsです。
SophiaFramework を用いています。

リファレンスに記載されていないエラー番号の内容は … ?

SophiaFramework が返すエラー ( SFCError 型 ) に関して、その番号が [ 0x0000 〜 0x3FFF ] の範囲にあるものでリファレンスに記載のないものは BREW プラットフォームが返したエラーです。

これらのエラーの詳細内容については、BREW SDK に含まれる AEEError.h というファイルをご覧になってください。

      

VC6 で ClassView にクラスリストが表示されないのですが ・・・ ?

Microsoft Visual Studio C++ 6.0 には、ClassView パーサのマクロ処理に関して不具合があります。

現時点で、ヘッダファイル内コンストラクタの static_throws マクロが原因となって Microsoft Visual Studio C++ 6.0 の ClassView にクラスリストが表示されないことが分かっています。

この場合の回避策は以下のとおりです。

回避策 1. static_throws マクロの記述を削除します。

static_throws マクロはコンパイル時に削除されますので、削除しても実行時に影響は及びません。

( 開発者に例外を搬出する可能性があることを明示しているだけなので )

回避策 2. ヘッダファイルの先頭の方で

#define static_throws

と記述します。

回避策 1. または 2. により、ClassView にクラスリストは正常に表示されるようになります。

# Microsoft Visual Studio C++ 6.0 では ClassView 関連の不具合のため、他にも正常にパースできない可能性があります。 ClassView にクラスリストを表示する必要性が高い場合は、Microsoft Visual C++ .NET2003 をご利用ください。Microsoft Visual C++ .NET2003 では正常に動作します。

      

BREW SDK 4.0.0 で開発する方法 (SophiaFramework 4.1.7)

SophiaFramework 4.1.7 から、BREW SDK 4.0.0 用新規プロジェクトを作成できるようになりました。CheckAvail 関数が BREW SDK 4.0.0 では正常に動作しないため、BREW SDK 4.0.0 を使う場合、サンプルコードで CheckAvail 関数が呼び出されないように変更しました。また、BREW SDK 4.0.0 ではモジュール名が 21 文字を超えると発生するエラーとなるため、すべてのサンプルコードのモジュール名を 21 文字以下としました。

※制約事項:
BREW SDK 4.0.0 API のラッパーは提供されていません。SophiaFramework 4.1.8 以降で、提供する予定です。

■ BREW SDK 4.0.0 で開発する手順

Step 1 : Qualcomm 社サイトから BREW 4.0.0 SDK をダウンロードし、インストールします。

Step 2 : SophiaFramework 4.1.7 をインストールします。

Step 3 : 環境変数を更新するため、再起動します。

Step 4 : SophiaFramework のリンカのファイルを変更します。

Visual C++ 6.0 の場合 :
[プロジェクト] -> [設定] -> [リンク] -> [オブジェクト / ライブラリ モジュール] で [SophiaFrameworkBrew310VC6.lib] を [SophiaFrameworkBrew400VC6.lib] に変更します。

.NET の場合 :
[プロジェクト] -> [(プロジェクト名)のプロパティ] -> [リンカの入力] -> [追加の依存ファイル] で [SophiaFrameworkBrew310NET.lib] を [SophiaFrameworkBrew400NET.lib] に変更します。

Step 5 : アプリをコンパイルします。

※ AEEIramCache および AEEIRecordStore に関してコンパイラ エラーが発生します。このエラーは、BREW SDK 4.0.0 の不具合です。

以下のように変更すれば、コンパイラ エラーを回避できます。

■変更前 

static __inline int IRAMCACHE_Find(IRamCache* piRamCache,
                                   const char* cpKey, int nKeyLen,
                                   void* pVal, int* pnValLen)
 
 {
     return AEEGETPVTBL(piRamCache,IRamCache)
           ->Find(piRamCache,
                  cpKey, nKeyLen,
                  pVal, pnValLen);
}


■変更後 

static __inline int IRAMCACHE_Find(IRamCache* piRamCache,
                                   const char* cpKey, int nKeyLen,
                                   void* pVal, int* pnValLen)
{
    return AEEGETPVTBL(piRamCache,IRamCache)
            ->Find(piRamCache,
                   cpKey, nKeyLen,
                   static_cast<char *>(pVal), pnValLen);
}
■変更前 

static __inline int IRECORDSTORE_Find(IRecordStore* piRecordStore,
                                     const char* cpKey, int nKeyLen,
                                     void* pVal, int* pnValLen)
{
    return AEEGETPVTBL(piRecordStore,IRecordStore)
           ->Find(piRecordStore,
                  cpKey, nKeyLen,
                  pVal, pnValLen);
}


■変更後 

static __inline int IRECORDSTORE_Find(IRecordStore* piRecordStore,
                                         char* cpKey, int nKeyLen,
                                         void* pVal, int* pnValLen)
{
    return AEEGETPVTBL(piRecordStore,IRecordStore)
           ->Find(piRecordStore,
                  cpKey, nKeyLen,
                  static_cast<char *>(pVal), pnValLen);
}

Step 6 : もう一度、コンパイルします。

【注意事項】

1) SophiaFramework 4.1.7 では BREW 4.0.0 API ラッパーは提供されていません。

[対策] SophiaFramework 4.1.8 以降で提供される予定です。

2) BREW 4.0.0 SDK には KDDI_FONT_FIXED16X16 が含まれないため、pclock アプリはコンパイルできません。

      

BREW SDK 4.0.0 で開発する方法 (SophiaFramework 4.1.6)

SophiaFramework 4.1.6 では、一部 BREW SDK 4.0.0 に対応しています。BREW SDK 3.1 以前の環境で開発した SophiaFramework アプリをコンパイルし実行できます。

※制約事項:
BREW SDK 4.0.0 用の新規プロジェクトは作成できません。また、BREW SDK 4.0.0 API のラッパーも提供されていません。SophiaFramework 4.1.7 以降で、提供する予定です。

■ BREW SDK 4.0.0 で開発する手順

Step 1 : Qualcomm 社サイトから BREW 4.0.0 SDK をダウンロードし、インストールします。

Step 2 : SophiaFramework 4.1.6 をインストールします。

Step 3 : 環境変数を更新するため、再起動します。

Step 4 : SophiaFramework のリンカのファイルを変更します。

Visual C++ 6.0 の場合 :
[プロジェクト] -> [設定] -> [リンク] -> [オブジェクト / ライブラリ モジュール] で [SophiaFrameworkBrew310VC6.lib] を [SophiaFrameworkBrew400VC6.lib] に変更します。

.NET の場合 :
[プロジェクト] -> [(プロジェクト名)のプロパティ] -> [リンカの入力] -> [追加の依存ファイル] で [SophiaFrameworkBrew310NET.lib] を [SophiaFrameworkBrew400NET.lib] に変更します。

Step 5 : アプリをコンパイルします。

※ AEEIramCache および AEEIRecordStore に関してコンパイラ エラーが発生します。このエラーは、BREW SDK 4.0.0 の不具合です。

以下のように変更すれば、コンパイラ エラーを回避できます。

■変更前 

static __inline int IRAMCACHE_Find(IRamCache* piRamCache,
                                   const char* cpKey, int nKeyLen,
                                   void* pVal, int* pnValLen)
 
 {
     return AEEGETPVTBL(piRamCache,IRamCache)
           ->Find(piRamCache,
                  cpKey, nKeyLen,
                  pVal, pnValLen);
}


■変更後 

static __inline int IRAMCACHE_Find(IRamCache* piRamCache,
                                   const char* cpKey, int nKeyLen,
                                   void* pVal, int* pnValLen)
{
    return AEEGETPVTBL(piRamCache,IRamCache)
            ->Find(piRamCache,
                   cpKey, nKeyLen,
                   static_cast<char *>(pVal), pnValLen);
}
■変更前 

static __inline int IRECORDSTORE_Find(IRecordStore* piRecordStore,
                                     const char* cpKey, int nKeyLen,
                                     void* pVal, int* pnValLen)
{
    return AEEGETPVTBL(piRecordStore,IRecordStore)
           ->Find(piRecordStore,
                  cpKey, nKeyLen,
                  pVal, pnValLen);
}


■変更後 

static __inline int IRECORDSTORE_Find(IRecordStore* piRecordStore,
                                         char* cpKey, int nKeyLen,
                                         void* pVal, int* pnValLen)
{
    return AEEGETPVTBL(piRecordStore,IRecordStore)
           ->Find(piRecordStore,
                  cpKey, nKeyLen,
                  static_cast<char *>(pVal), pnValLen);
}

Step 6 : もう一度、コンパイルします。

【注意事項】

1) SophiaFramework 4.1.6 では、BREW 4.0.0 用の新規プロジェクトを作成できません。

[対策] SophiaFramework 4.1.7 以降で対応いたします。

2) SophiaFramework 4.1.6 では BREW 4.0.0 API ラッパーは提供されていません。

[対策] SophiaFramework 4.1.8 以降で提供される予定です。

3) BREW 4.0.0 用シミュレータでアプリ起動すると Unknown Error(1) が発生します。

以下のサンプルアプリで発生します。

−SyncScheduler
−psec
−Recog
−pself_dom
−pself_sax

[原因] CheckAvail 関数が BREW 4.0.0 では正常に動作しないためです。

[対策] CheckAvail 関数を使わなければ正常に動作します。

4) BREW 4.0.0 用シミュレータでアプリ起動すると Unknown Error(14) が発生します。

以下のサンプルコードで発生します。

−SFXCollectionExplainer
−SFXMathematicsExplainer

[原因] モジュール名が 21 文字を超えると発生するエラーです。

[対策] BREW 4.0.0 SDKでは、モジュール名は 21 文字以下にします。

5) BREW 4.0.0 SDK には KDDI_FONT_FIXED16X16 が含まれないため、pclock アプリはコンパイルできません。

      

RealView Compilation Tools for BREW V1.2 の Build 848 patch の入手方法

RealView Compilation Tools for BREW V1.2 の Build 848 patch を入手方法は以下の手順です。

パッチの入手方法

1:ARM社TECHNICAL SUPPORT ページを開きます。
2:「DOWNLOADS」のリンクをクリックします。
3:ダウンロード一覧の上部にある「ARM Developer Suite」の中の、「ADS 1.2」のリンクをクリックします。
4:ADS 1.2 用のダウンロード一覧の下部にある、「ADS 1.2: Build 848 patch for Windows」のリンクをクリックします。
5:パッチについての説明が書かれたページが開きますが、そのページの下部にある「Download (8736 Lb Zip) >>」のリンクをクリックします。
6:パッチに関する使用許諾書が表示されるので、熟読した上で、ページ下部にある「I agree」ボタンをクリックします。
7:ファイルの処理方法を尋ねるダイアログが表示されるので、ディスクに保存するようにして、保存先に適当な場所を選択してください。


パッチの適用手順

1:ダウンロードした 4554.exe を実行します。
2:"Unzip to folder:"に、適当なフォルダを選択します。ここで指定したフォルダに、パッチが展開されます。
3:「Unzip」ボタンをクリックします。
4:"82 file(s) unzipped successfully."というダイアログが表示されるので、「OK」ボタンをクリックします。
5: 1 で開いたダイアログの「Close」ボタンをクリックします。
6: 2 で指定したフォルダに展開されたフォルダ、およびファイルを、RealView Compilation Tools for BREW V1.2のフォルダ内にコピーします。
通常このフォルダは、
C:\Program Files\ARM\RVCT_BREWv1_2
です。
7:上書きの確認ダイアログが表示された場合は、「すべて上書き」をクリックします。

      

BREW SDK 3.1.5の開発環境について

SophiaFramework は BREW SDK v3.1.5 については動作保障を行っておりません。
BREW SDK 3.1.2日本語版をご使用ください。

BREW SDK 変更手順

1:BREW SDK v3.1.5 および BREW SDK v3.1.2 Ja のアンインストールを行ってください。
[設定]-[コントロールパネル]-[プログラムの追加と削除] から BREW SDK バージョン名 を選択し削除します。
2:BREW SDK v3.1.2 Jaを再インストールしてください。

      

Microsoft Visual C++6.0 の開発環境について

Microsoft Visual C++6.0 で Service Pack 6 以前の開発環境の場合、コンパイルできない可能性があります。
Service Pack 6 を入手しコンパイラ アップデートを行ってください。

<コンパイラ アップデートの入手方法と適用方法>

Service Pack の入手方法
1:Microsoft 社Microsoft Visual Studio 製品 ダウンロード情報ページを開きます。
2:製品一覧の中の、「Visual Studio 6.0」をクリックします。
3:Visual Studio 6.0 用 Service Pack 一覧の中の、「Visual Studio 6.0 Service Pack 6」をクリックします。
4:新しく開いたページの中程にある、「Visual Studio 6.0 Service Pack 6 の入手方法」のリンクをクリックします。
5:「Web サイトからのダウンロード」の一覧の中にある、「Full 版」のリンクをクリックします。
6:「言語の変更 :」が「日本語」になっていることを確認します。もし「日本語」になっていなければ「日本語」に変更してください。
7:「ダウンロード」ボタンをクリックします。ファイルの処理方法を尋ねるダイアログが表示された場合は、ディスクに保存するようにして、保存先に適当な場所を選択してください。

Service Pack のインストール
1:ダウンロードした Vs6sp6.exe を実行します。
2:ファイルの展開先フォルダを尋ねるダイアログが表示されるので、展開先を指定して、「OK」ボタンをクリックします。
3:上で展開先に指定したフォルダを開き、その中にある setupsp6.exe を実行します。
4:インストーラの指示に従って、Service Pack のインストールを完了します。

      

コンパイルできない (インクルードファイルのエラー)

以下のエラーメッセージが出て、コンパイルできないときは、インクルードディレクトリの設定を確認してください。

fatal error C1083: インクルードファイルがオープンできません。'SophiaFramework.hpp'

確認手順

Visual C++ 6.0 の場合

・メニューから [ツール] > [オプション] を選択
・[ディレクトリ] タブを選択
・[表示するディレクトリ] の項目から [インクルード ファイル] を選択
・ディレクトリのリスト内に、

C:\Program Files\Sophia Cradle\SophiaFramework\4.1\Include
(SophiaFramework インストール先の Include ディレクトリ)

があるか確認。無ければ追加する。
・[表示するディレクトリ] の項目から [ライブラリ ファイル] を選択
・ディレクトリのリスト内に、

C:\Program Files\Sophia Cradle\SophiaFramework\4.1\Library

があるか確認。無ければ追加する。

Visual Studio 2003/2005 の場合

・メニューから [ツール] > [オプション] を選択
・左のリストから [プロジェクト] > [VC++ ディレクトリ] を選択
・[ディレクトリを表示するプロジェクト] の項目から [インクルード ファイル] を選択
・ディレクトリのリスト内に、

C:\Program Files\Sophia Cradle\SophiaFramework\4.1\Include
(SophiaFramework インストール先の Include ディレクトリ)

があるか確認。無ければ追加する。
・[ディレクトリを表示するプロジェクト] の項目から [ライブラリ ファイル] を選択
・ディレクトリのリスト内に、

C:\Program Files\Sophia Cradle\SophiaFramework\4.1\Library

があるか確認。無ければ追加する。

      

異なるバージョンの SophiaFramework を同時に使う

異なるバージョンの SophiaFramework を同時にインストールして使うことができます。
(ライセンス上の問題はございません)

アプリをコンパイルするときに読み込むヘッダファイルとライブラリファイルを、直接指定する限り問題は起きません。

SophiaFramework 3.0 以降はインストーラがいくつかの環境変数とレジストリを設定します。また、VisualStudio C++ 6.0 / .NET 2003 の環境設定ファイルを編集し、アプリウィザードなどの機能拡張モジュールをインストールします。

旧バージョンがインストールされている状態で新バージョンをインストールすると、これら設定が上書きされる可能性があります。

複数バージョンをインストールする場合の具体的な手順は、

1.SophiaFramework 2.x をインストールします。

2.SophiaFramework 3.x をインストールします。
(インストーラの設定でカスタムインストールを選択し、
ヘッダファイルとライブラリ、リファレンスなど必要最小限の
ファイルだけインストールします。)

3.SophiaFramework 4.x をインストールします。
(インストーラの設定で標準インストールです。)

4.この状態では、アプリウィザードや機能拡張モジュールは
 4.x のものが利用できます。

5.古いバージョンの SophiaFramework を参照するアプリは、コンパイル時の
ヘッダファイルやライブラリのパスを直接指定します。

      

ARM のリンケージでエラーが発生する

ARM のリンケージでエラーが発生する場合は、以下の項目をご確認ください。

1. RVCTB のビルドバージョン (コマンドラインで armcpp と入力する)

SophiaFramework では、RealView Compilation Tools for BREW 1.2 の Build 848 が必要です。

2. ARM 用のメイクファイルのコンパイラオプション

OPT = -Ospace -O2 --no_inlinemax

になっている場合、-Ospace を -Otime に変えてみる。

      

コードの実行速度をミリ秒単位で計測する

SFXDate::CurrentDate 関数で取得できる時刻は秒単位です。
時間をミリ秒単位で取得するには、SFXHelper::gettimems を使用します。

UInt32 startms = SFXHelper::gettimems();

func();  // 測定したい処理

UInt32 endms = SFXHelper::gettimems();
SInt32 milisecTime = endms - startms;  // milisecTime は
                                       // 測定した時間(ミリ秒単位)

参照 SFXHelper::gettimems

      

実行されるコードをエミュレータと実機で分岐する

実行されるコードをエミュレータと実機で分岐するには、
TARGET_ENVIRONMENT_SIMULATOR マクロと TARGET_ENVIRONMENT_PHYSICAL マクロを
使用します。

#if defined(TARGET_ENVIRONMENT_SIMULATOR)
// ここにエミュレータ用に実行されるコードを記述する

#endif
#if defined(TARGET_ENVIRONMENT_PHYSICAL)
// ここの実機用に実行されるコードを記述する

#endif

参照 TARGET_ENVIRONMENT_SIMULATOR | TARGET_ENVIRONMENT_PHYSICAL