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

BREW C++ プログラミング 逆引きコード集 : トラブル

SophiaFramework を用いたBREW アプリ作成中のトラブルを対処する方法です。

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

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 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 のインストールを完了します。

      

Modファイルが作成できない

コンパイル時にエラーが発生せず、Modファイル作成時に以下のエラーが発生する場合があります。

non-POD object cannot be passed as '...' argument

このエラーメッセージは、SFXHelper関数を使用した際に起きているエラーの可能性があります。(BREW関数使用時にも同様のエラーが起きる可能性があります。)

以下にエラー出力例を記述します。

// SFXHelper::dbgprintf を使用した時のエラー出力例

// NGの記述例
SFXAnsiString str
SFXHelper::dbgprintf("%s", str); //C 言語型文字列に変換していないためエラー

// OKの記述例
SFXAnsiString str
SFXHelper::dbgprintf("%s", str.GetCString()); //C 言語型文字列に変換したためOK
      

コンパイルできない (インクルードファイル「AEEKDDI.h」のエラー)

以下のエラーメッセージが出てコンパイルできないときは、KDDIの拡張インターフェースを削除する必要があります。

「fatal error C1083: include ファイルを開けません。'AEEKDDI.h'」

削除手順

Visual C++ 6.0 の場合

・メニューから [プロジェクト] > [設定] を選択
・[C/C++] タブを選択
・[プリプロセッサの定義] の項目から [TARGET_EXTENSION_KDDI] を削除し、OKボタンを押下

Visual Studio 2003/2005 の場合

・メニューから [プロジェクト] > [プロパティ] を選択
・[C/C++] フォルダから[プリプロセッサ]を選択
・[プリプロセッサの定義] の項目から [TARGET_EXTENSION_KDDI] を削除し、OKボタンを押下

      

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

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

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

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

      

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

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

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

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

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

OPT = -Ospace -O2 --no_inlinemax

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

      

キーを押してもキーハンドラが起動しない

キーハンドラを起動させるには、キーハンドラの定義の他に、登録が必要です。

キーハンドラはコンストラクタなどで登録します。

// コンストラクタ
MyWindow::MyWindow(Void)
{
    // OnKey ハンドラをすべてのキーイベントに反応するように登録する
    // (エラー処理は省略)
    RegisterHandler(SFEVT_KEY, HANDLER_AFTER, HANDLER_FUNCTION(OnKey));
}

クリアーキーだけに反応させる場合

RegisterHandler(SFEVT_KEY, AVK_CLR, HANDLER_AFTER,
    HANDLER_FUNCTION(OnClear));

矢印キーだけに反応させる場合

// キーコードの範囲を指定して登録する (AVK_UP から AVK_RIGHT まで)
RegisterHandler(SFEVT_KEY, AVK_UP, AVK_RIGHT, HANDLER_AFTER,
    HANDLER_FUNCTION(OnKey));
      

描画ができない

描画ができない場合は以下の項目をご確認ください。

・GUI フレームワークを使用したアプリ (アプリクラスが SFRApplication を継承) の場合

1. 描画ハンドラの中で描画していますか?

2. 描画ハンドラマクロの引数の graphics を使って描画していますか?

// 描画ハンドラの定義(ウィンドウ内に描画)
HANDLER_IMPLEMENT_VOIDRENDER(MyWindow, OnRenderContent, graphics)
{
    // 四角形を描画する
    graphics->DrawRectangle(SFXRectangle(10, 10, 25, 25));
    
    // graphics->Update(); は必要なし
}

3. コンストラクタで描画ハンドラを登録していますか?

// コンストラクタ
MyWindow::MyWindow(Void) : ...
{
    // ハンドラを登録する(エラー処理は省略)
    RegisterHandler(SREVT_RESPONDER_RENDER, SRP16_RENDER_CONTENT,
                        HANDLER_BEFORE, HANDLER_FUNCTION(OnRenderContent));
    return;
}

・GUI フレームワークを使用しないアプリ (アプリクラスが SFCApplication を継承) の場合

1. グラフィックス・インターフェースを取得していますか?

SFXGraphicsPtr graphics;

// グラフィックス・インターフェースを取得する
graphics = SFXGraphics::GetInstance();

// 四角形を描画する
graphics->DrawRectangle(SFXRectangle(10, 10, 25, 25));

2. SFXGraphics::Update 関数を呼び出していますか?

graphics->Update();

graphics インスタンスについては グラフィックインターフェースの取得 を参照

参照: リファレンス 7.3.3 ウィンドウ内の描画 |
リファレンス 5.3 画面に描画する