リファレンスに記載されていないエラー番号の内容は … ?
SophiaFramework が返すエラー ( SFCError 型 ) に関して、その番号が [ 0x0000 〜 0x3FFF ] の範囲にあるものでリファレンスに記載のないものは BREW プラットフォームが返したエラーです。
これらのエラーの詳細内容については、BREW SDK に含まれる AEEError.h というファイルをご覧になってください。
SophiaFramework を用いたBREW アプリ作成中のトラブルを対処する方法です。
SophiaFramework が返すエラー ( SFCError 型 ) に関して、その番号が [ 0x0000 〜 0x3FFF ] の範囲にあるものでリファレンスに記載のないものは BREW プラットフォームが返したエラーです。
これらのエラーの詳細内容については、BREW SDK に含まれる AEEError.h というファイルをご覧になってください。
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 では正常に動作します。
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 で 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ファイル作成時に以下のエラーが発生する場合があります。
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
以下のエラーメッセージが出てコンパイルできないときは、KDDIの拡張インターフェースを削除する必要があります。
「fatal error C1083: include ファイルを開けません。'AEEKDDI.h'」
削除手順
・メニューから [プロジェクト] > [設定] を選択
・[C/C++] タブを選択
・[プリプロセッサの定義] の項目から [TARGET_EXTENSION_KDDI] を削除し、OKボタンを押下
・メニューから [プロジェクト] > [プロパティ] を選択
・[C/C++] フォルダから[プリプロセッサ]を選択
・[プリプロセッサの定義] の項目から [TARGET_EXTENSION_KDDI] を削除し、OKボタンを押下
以下のエラーメッセージが出て、コンパイルできないときは、インクルードディレクトリの設定を確認してください。
fatal error C1083: インクルードファイルがオープンできません。'SophiaFramework.hpp'
確認手順
・メニューから [ツール] > [オプション] を選択
・[ディレクトリ] タブを選択
・[表示するディレクトリ] の項目から [インクルード ファイル] を選択
・ディレクトリのリスト内に、
C:\Program Files\Sophia Cradle\SophiaFramework\4.1\Include (SophiaFramework インストール先の Include ディレクトリ)
があるか確認。無ければ追加する。
・[表示するディレクトリ] の項目から [ライブラリ ファイル] を選択
・ディレクトリのリスト内に、
C:\Program Files\Sophia Cradle\SophiaFramework\4.1\Library
があるか確認。無ければ追加する。
・メニューから [ツール] > [オプション] を選択
・左のリストから [プロジェクト] > [VC++ ディレクトリ] を選択
・[ディレクトリを表示するプロジェクト] の項目から [インクルード ファイル] を選択
・ディレクトリのリスト内に、
C:\Program Files\Sophia Cradle\SophiaFramework\4.1\Include (SophiaFramework インストール先の Include ディレクトリ)
があるか確認。無ければ追加する。
・[ディレクトリを表示するプロジェクト] の項目から [ライブラリ ファイル] を選択
・ディレクトリのリスト内に、
C:\Program Files\Sophia Cradle\SophiaFramework\4.1\Library
があるか確認。無ければ追加する。
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));
描画ができない場合は以下の項目をご確認ください。
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;
}
1. グラフィックス・インターフェースを取得していますか?
SFXGraphicsPtr graphics; // グラフィックス・インターフェースを取得する graphics = SFXGraphics::GetInstance(); // 四角形を描画する graphics->DrawRectangle(SFXRectangle(10, 10, 25, 25));
2. SFXGraphics::Update 関数を呼び出していますか?
graphics->Update();
graphics インスタンスについては グラフィックインターフェースの取得 を参照