<?xml version="1.0" encoding="shift_jis"?>
<rss version="2.0">
   <channel>
      <title>逆引きFAQ</title>
      <link>http://www.s-cradle.com/developer/sophiaframework/reversefaq/</link>
      <description></description>
      <language>ja</language>
      <copyright>Copyright 2008</copyright>
      <lastBuildDate>Tue, 08 Jan 2008 13:19:46 +0900</lastBuildDate>
      <generator>http://www.sixapart.com/movabletype/?v=3.21-ja</generator>
      <docs>http://blogs.law.harvard.edu/tech/rss</docs> 

            <item>
         <title>リファレンスに記載されていないエラー番号の内容は … ?</title>
         <description><![CDATA[SophiaFramework が返すエラー ( SFCError 型 ) に関して、その番号が [ 0x0000 〜 0x3FFF ] の範囲にあるものでリファレンスに記載のないものは BREW プラットフォームが返したエラーです。

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

<div class="r_information">
<p><img src="http://www.s-cradle.com/images/small_icons/button_tri_r12.gif" al="" />&nbsp;関連情報</p>
<ul>
<li><a href="http://www.s-cradle.com/developer/sophiaframework/sf_reference/ref.SFCErrorEnum.html">SophiaFramework リファレンス : SFCErrorEnum</a></li>
</ul>
</div>
]]></description>
         <link>http://www.s-cradle.com/developer/sophiaframework/reversefaq/005/post_117.html</link>
         <guid>http://www.s-cradle.com/developer/sophiaframework/reversefaq/005/post_117.html</guid>
         <category>005)トラブル</category>
         <pubDate>Tue, 08 Jan 2008 13:19:46 +0900</pubDate>
      </item>
            <item>
         <title>VC6 で ClassView にクラスリストが表示されないのですが ･･･ ？</title>
         <description><![CDATA[Microsoft Visual Studio C++ 6.0 には、ClassView パーサのマクロ処理に関して不具合があります。
 
現時点で、ヘッダファイル内コンストラクタの static_throws マクロが原因となって Microsoft Visual Studio C++ 6.0 の ClassView にクラスリストが表示されないことが分かっています。

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

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

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

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

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

<pre>
#define static_throws
</pre>

と記述します。

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

# Microsoft Visual Studio C++ 6.0 では ClassView 関連の不具合のため、他にも正常にパースできない可能性があります。 ClassView にクラスリストを表示する必要性が高い場合は、Microsoft Visual C++ .NET2003 をご利用ください。Microsoft Visual C++ .NET2003 では正常に動作します。 ]]></description>
         <link>http://www.s-cradle.com/developer/sophiaframework/reversefaq/010/vc6_classview.html</link>
         <guid>http://www.s-cradle.com/developer/sophiaframework/reversefaq/010/vc6_classview.html</guid>
         <category>010)開発環境</category>
         <pubDate>Fri, 26 Oct 2007 10:31:00 +0900</pubDate>
      </item>
            <item>
         <title>SFXFrameColor クラスを使ってフレームを描画する</title>
         <description><![CDATA[SFXFrameColor クラスは、フレームの枠と影の部分の色をまとめて管理するためのクラスです。

このクラスは SFXGraphics クラスでフレームを描画する場合に利用します。フレームの各部分の色について演算したり、フレーム全体について色演算できます。

※ 数値がオーバーフローする場合や、アンダーフローする場合は適切に処理されます。

■ SFXFrameColor クラスの使用方法 
<pre>
Void SFXColorExplainer::_SFXFrameColor(Void) const
{
    // フレーム色定数を準備する
    // ( 以下のフレーム色は、緑色の枠と赤色の影を表す )

    static SFXFrameColor::AtomRecConst frame = {
        {0x00, 0x00, 0xFF, 0x00}, {0x00, 0xFF, 0x00, 0x00}
    };
    SFXGraphicsPtr graphics;

    // グラフィック オブジェクトを取得する

    graphics = SFXGraphics::GetInstance();
    if (graphics != null) {

        // フレームを描画する
        // ( フレームは指定した矩形の外側に描画される )

        graphics-&gt;DrawFrame(SFXRectangle(20, 20, 40, 40), frame);

        // 画面をアップデートする

        graphics-&gt;Update();
    }
    return;
}
</pre>]]></description>
         <link>http://www.s-cradle.com/developer/sophiaframework/reversefaq/110/cat178/sfxframecolor.html</link>
         <guid>http://www.s-cradle.com/developer/sophiaframework/reversefaq/110/cat178/sfxframecolor.html</guid>
         <category>カラー</category>
         <pubDate>Wed, 24 Oct 2007 11:58:00 +0900</pubDate>
      </item>
            <item>
         <title>SFXBevelColor クラスを使ってべベル矩形を描画する</title>
         <description><![CDATA[SFXBevelColor クラスは、ベベル矩形のライト・ベース・ダークの各部分の色をまとめて管理するためのクラスです。( 「ベベル矩形」とは立体的に見える長方形のことです。 )

このクラスは SFXGraphics クラスでベベル矩形を描画する場合に利用します。ベベル矩形の各部分の色について演算したり、全体について色演算できます。

※ 数値がオーバーフローする場合や、アンダーフローする場合は適切に処理されます。

■ SFXBevelColor クラスの使用方法 
<pre>
Void SFXColorExplainer::_SFXBevelColor(Void) const
{
    // 青色のベース色定数を準備する

    static SFXRGBColor::AtomRecConst color = {
        0x00, 0x88, 0x88, 0xFF
    };
    SFXRGBColor temp;
    SFXBevelColor bevel;
    SFXGraphicsPtr graphics;

    // べベル色のライト部分・ベース部分・ダーク部分を青色に設定する

    bevel.Set(color, color, color);

    // ライト部分の各要素に 0x66 を加算する

    bevel.AddLightRGB(0x66);

    // ダーク部分の各要素から 0x44 を減算する

    bevel.SubDarkRGB(0x44);

    // グラフィック オブジェクトを取得する

    graphics = SFXGraphics::GetInstance();
    if (graphics != null) {

        // べベル矩形を描画する

        graphics-&gt;FillBevelRectangle(SFXRectangle(20, 20, 40, 40), bevel);

        // べベル色のライト部分とダーク部分を入れ替える

        temp = bevel.GetLight();
        bevel.SetLight(bevel.GetDark());
        bevel.SetDark(temp);

        // べベル矩形を描画する

        graphics-&gt;FillBevelRectangle(SFXRectangle(24, 24, 32, 32), bevel);

        // 画面をアップデートする

        graphics-&gt;Update();
    }
    return;
}
</pre>]]></description>
         <link>http://www.s-cradle.com/developer/sophiaframework/reversefaq/110/cat178/sfxbevelcolor.html</link>
         <guid>http://www.s-cradle.com/developer/sophiaframework/reversefaq/110/cat178/sfxbevelcolor.html</guid>
         <category>カラー</category>
         <pubDate>Wed, 24 Oct 2007 11:54:08 +0900</pubDate>
      </item>
            <item>
         <title>SFXRGBColor クラスを使って色の演算を行う</title>
         <description><![CDATA[SFXRGBColor クラスは RGB 値にあわせてアルファ値を管理するためのクラスです。

BREW では RGBVAL 型を使って色を表しますが、SophiaFramework では SFXRGBColor クラスを利用します。

このクラスを利用すると色の演算を簡単に行えます。たとえば、色を明るくする場合や暗くする場合など関数を呼び出すだけで色を調整できます。

※ 数値がオーバーフローする場合や、アンダーフローする場合は適切に処理されます。

■  SFXRGBColor クラスの使用方法 
<pre>
Void SFXColorExplainer::_SFXRGBColor(Void) const
{
    // 透明度の違う赤色を準備する
    // red1 変数は通常のコンストラクタでの初期化する
    // red2 変数は POD 構造体を利用した定数初期化する
    // ( RVCT for BREW では、red2 変数は定数として扱われるので
    //   実行時初期化を防止することが可能 )
    // コンストラクタを利用する場合は、左から RGBA の順序で記述する
    // POD 構造体を利用する場合は、左から ARGB の順序で記述する

    SFXRGBColor red1(0xFF, 0x00, 0x00, 0x00);
    static SFXRGBColor::AtomRecConst red2 = {
        0xFF, 0xFF, 0x00, 0x00
    };
    SFXRGBColor green;

    // Set() 関数を使用して緑色に設定する

    green.Set(0x00, 0xFF, 0x00, 0x00);
    TRACE("r = %02X, g = %02X, b = %02X, a = %02X", green.GetRed(), green.GetGreen(), green.GetBlue(), green.GetAlpha());

    // 各要素に値を加算する

    green.Add(0x88, 0x00, 0x88, 0x00);
    TRACE("r = %02X, g = %02X, b = %02X, a = %02X", green.GetRed(), green.GetGreen(), green.GetBlue(), green.GetAlpha());

    // 青色の要素から値を減算する

    green.SubBlue(0x44);
    TRACE("r = %02X, g = %02X, b = %02X, a = %02X", green.GetRed(), green.GetGreen(), green.GetBlue(), green.GetAlpha());

    // 各要素から値を減算する
    // ( 演算結果がアンダーフローするときは、自動的に最小値になる )

    green.Sub(0xFF, 0x00, 0xFF, 0x00);
    TRACE("r = %02X, g = %02X, b = %02X, a = %02X", green.GetRed(), green.GetGreen(), green.GetBlue(), green.GetAlpha());

    // 緑色の要素に値を加算する
    // ( 演算結果がオーバーフローするときは、自動的に最大値になる )

    green.AddGreen(0x44);
    TRACE("r = %02X, g = %02X, b = %02X, a = %02X", green.GetRed(), green.GetGreen(), green.GetBlue(), green.GetAlpha());

    // 全ての要素を比較する

    TRACE("red1.Equals(red2) = %s", (red1.Equals(red2)) ? ("true") : ("false"));

    // 赤・緑・青の要素だけを比較する

    TRACE("red1.EqualsRGB(red2) = %s", (red1.EqualsRGB(red2)) ? ("true") : ("false"));
    return;
}
</pre>]]></description>
         <link>http://www.s-cradle.com/developer/sophiaframework/reversefaq/110/cat178/sfxrgbcolor.html</link>
         <guid>http://www.s-cradle.com/developer/sophiaframework/reversefaq/110/cat178/sfxrgbcolor.html</guid>
         <category>カラー</category>
         <pubDate>Wed, 24 Oct 2007 11:48:53 +0900</pubDate>
      </item>
            <item>
         <title>RVCT for BREW 提供の数学関数を使用する</title>
         <description><![CDATA[SophiaFrameworkでは <a href="http://www.jp.arm.com/products/devtools/brew_builder.html">RVCT for BREW</a> 提供の数学関数が利用可能です。

詳しくはリファレンス「<a href="http://www.s-cradle.com/developer/sophiaframework/sf_reference/sec.general.mathematics.html#sec.general.mathematics.float">RVCTB 提供数学関数の使用</a>」を参照してください。]]></description>
         <link>http://www.s-cradle.com/developer/sophiaframework/reversefaq/115/post_49.html</link>
         <guid>http://www.s-cradle.com/developer/sophiaframework/reversefaq/115/post_49.html</guid>
         <category>115)数値・数学演算</category>
         <pubDate>Wed, 24 Oct 2007 11:25:23 +0900</pubDate>
      </item>
            <item>
         <title>乱数を取得する</title>
         <description><![CDATA[SophiaFramework は、BREWネイティブ、線形合同法、メルセンヌ ツイスター法の3種類の乱数クラスを提供します。

■ BREW ネイティブ( SFXBrewRandom クラス ) : BREW API である GETRAND() 関数を使って乱数を発生させるクラスです。

<pre>
// 用意されている static 関数を使って乱数を生成する 
SInt32 n1 = SFXBrewRandom::GetSInt32();
// ※ SInt32 以外の型の乱数を生成する関数も用意されている
</pre>

■ 線形合同法(  SFXLCGRandom クラス ) : 線形合同法を用いて 48 ビットで乱数を発生させるクラスです。アルゴリズムは UNIX の drand48() 関数と同等です。BREW ネイティブ( SFXBrewRandom クラス )と異なり、同じシードを使用すれば、同じ乱数列を取得できます。

<pre>
// 乱数列の seed はコンストラクタの引数として渡す
SFXLCGRandom rand2(3245);  
// 乱数を生成する
SInt32 n3 = rand2.GetSInt32();

// コンストラクタの引数を指定しない場合、時刻が乱数列の seed  となる
SFXLCGRandom rand;  
// 乱数を生成する
SInt32 n2 = rand.GetSInt32();  
</pre>

■ メルセンヌ ツイスター法 ( SFXMTRandom クラス ) :  メルセンヌ・ツイスター法のアルゴリズムを使って乱数を発生させるクラスです。BREW ネイティブ( SFXBrewRandom クラス )と異なり、同じシードを使用すれば、同じ乱数列を取得できます。

※ ローカル変数として SFXMTRandom クラスのインスタンスを作成する場合、2.5K バイトほどのスタックを消費します。スタックの容量が不足する場合はヒープ上にインスタンスを作成します。

<pre>
// 乱数列の seed はコンストラクタの引数として渡す
SFXMTRandom rand2(3245);  
// 乱数を生成する
SInt32 n5 = rand2.GetSInt32();

// コンストラクタの引数を指定しない場合、時刻が乱数列の seed  となる
SFXMTRandom rand;  
// 乱数を生成する
SInt32 n4 = rand.GetSInt32();  
</pre>

参照 SFXBrewRandom::GetSInt32 | SFXLCGRandom::GetSInt32 |
     SFXMTRandom::GetSInt32]]></description>
         <link>http://www.s-cradle.com/developer/sophiaframework/reversefaq/115/post_47.html</link>
         <guid>http://www.s-cradle.com/developer/sophiaframework/reversefaq/115/post_47.html</guid>
         <category>115)数値・数学演算</category>
         <pubDate>Wed, 24 Oct 2007 11:17:32 +0900</pubDate>
      </item>
            <item>
         <title>三角関数テーブルを使って三角関数の演算を行う</title>
         <description><![CDATA[SFXTrigonometric クラスは三角関数テーブルを用いて高速に三角関数演算を行うためのクラスです。

最初に、SFXTrigonometric クラスを初期化し、任意の精度の三角関数テーブルを作成します。そして sin, cos, tan などの三角関数演算を行います。

三角関数テーブルの初期化時は精度を上げると初期化に時間がかかります。逆に、精度を下げると初期化は短時間で終わります。

sin, cos, tan の演算時に浮動小数点演算が行われないで、高速な三角関数演算を実現できます。

以下に使用例を示します。 

■ SFXTrigonometric クラスの使用方法 
<pre>
Void SFXMathematicsExplainer::_SFXTrigonometric(Void) const
{
    SFXTrigonometric tri;
    SInt16 i;
    Float64 temp;

    // 三角関数テーブルを初期化する( 時間がかかる処理 )

    if (tri.Initialize() == SFERR_NO_ERROR) {

        for (i = 0; i < 10; ++i) {

            // 三角関数テーブルを使って sin 値を計算する
            // PI : 円周率

            temp = tri.Sin(i * 9 * PI / 180);
            TRACE("%d", static_cast<SInt32>(temp * 10000.0));
        }

        // メモリを明示的に解放する

        tri.Terminate();
    }

    // 三角関数テーブルを分割数を 45 と指定して初期化する方法:
    // ( 分割数を指定しない場合、デフォルトの分割数は 90 )
    // 分割数 90 の場合よりも精度が劣化するが、初期化は高速化する

    if (tri.Initialize(45) == SFERR_NO_ERROR) {

        for (i = 0; i < 10; ++i) {

            // 三角関数テーブルを使って sin 値を計算する
           // PI : 円周率

            temp = tri.Sin(i * 9 * PI / 180);
            TRACE("%d", static_cast<SInt32>(temp * 10000.0));
        }

        // メモリを明示的に解放する

        tri.Terminate();
    }

    // SFXTrigonometric クラスでは、sin 以外に 
    // cos と tan の値が計算可能

    return;
}

</pre>

参照 SFXTrigonometric::Initialize | SFXTrigonometric::Sin |
     SFXTrigonometric::Cos | SFXTrigonometric::Tan |
     SFXTrigonometric::Terminate]]></description>
         <link>http://www.s-cradle.com/developer/sophiaframework/reversefaq/115/post_48.html</link>
         <guid>http://www.s-cradle.com/developer/sophiaframework/reversefaq/115/post_48.html</guid>
         <category>115)数値・数学演算</category>
         <pubDate>Wed, 24 Oct 2007 11:05:00 +0900</pubDate>
      </item>
            <item>
         <title>SFXBrewPointer クラスの使用方法</title>
         <description><![CDATA[SFXBrewPointer クラスは BREW インターフェースのインスタンスを自動管理するためのスマート ポインター クラスです。このクラスはテンプレート クラスとなっており、ラッパー クラスの種類だけ自動的に型が生成されます。

ラッパー クラスのインスタンスは、スマート ポインターで自動的に管理されますので、 SFXBrewPointer クラスを明示的に使用する必要はありません。 

以下のようにして、明示的に型を生成することも可能です。 

■ SFXBrewPointer クラスの使用方法 
<pre>
Void SFXPointerExplainer::_SFXBrewPointer(Void) const
{
    // 以下の 2 種類の変数宣言は同等
    // ( 通常、記述しやすい Smp バージョンを利用する )

    SFXBrewPointer&lt;SFBDisplay&gt; display1;
    SFBDisplaySmp display2;

    // ラッパー クラスのインスタンスの生成は、
    // 各ラッパー クラスの NewInstance() 関数または 
    // GetInstance() 関数を利用する
    // ( スマート ポインターがインスタンスを管理するので、解放処理は不要 )

    SFBGraphicsSmp graphics;
    SFBGraphicsPtr raw_graphics;

    if ((graphics = SFBGraphics::NewInstance()) != null) {

        // インスタンスの取得成功
    }

    // 管理しているインスタンスの生ポインターの取得

    raw_graphics = graphics.Get();

    // スマート ポインターの比較

    if (display1 == display2) {
    }

    if (display1 != display2) {
    }

    // スマート ポインターと生ポインターの比較

    if (graphics == raw_graphics) {
    }

    // null ポインターとの比較

    if (graphics != null) {
    }

    // 他の型を表すスマート ポインター同士の比較
    // ( 推奨されないが、設計上可能 )

    if (graphics != display1) {
    }

    // スマート ポインターが管理するインスタンスのポインターのキャストは、
    // static_pointer_cast 演算子などを利用する
    // ( static_cast 演算子を利用してはいけない )

    SFBBaseSmp base;
    SFBBitmapSmp bitmap;

    base = bitmap;
    bitmap = static_pointer_cast&lt;SFBBitmap&gt;(base);

    // 空インスタンスの取得
    // ( 関数の戻り値として空のインスタンスへの参照を返す場合に便利 )

    SFBFileSmpConstRef file(SFBFileSmp::EmptyInstance());

    unused(file);

    // 管理しているインスタンスの明示的な解放

    SFBFileMgrSmp filemgr;

    if ((filemgr = SFBFileMgr::NewInstance()) != null) {

        // SFXBrewPointer クラスの Release() 関数を呼び出す

        filemgr.Release();

        // SophiaFramework 3.0 以上では 
        // SFBBase (IBase) クラスの AddRef(), Release() 関数を呼び出せない

        /*
        filemgr-&gt;Release();
        */
    }

    return;
}
</pre>]]></description>
         <link>http://www.s-cradle.com/developer/sophiaframework/reversefaq/000/sfxbrewpointer.html</link>
         <guid>http://www.s-cradle.com/developer/sophiaframework/reversefaq/000/sfxbrewpointer.html</guid>
         <category>000)プログラム全般</category>
         <pubDate>Wed, 24 Oct 2007 10:31:40 +0900</pubDate>
      </item>
            <item>
         <title>SophiaFrameworkから BREW エクステンションに AEEApplet 構造体のポインターを渡す方法</title>
         <description><![CDATA[SophiaFramework には AEEApplet 構造体が存在しません。

SophiaFramework で AEEApplet に相当するクラスは、SFCApplet クラスですが、このクラスは IApplet クラスを独自に拡張した変数の並びとなっています。

そのため、SFBApplet::GetInstance() 関数や SFXHelper::getinstance() 関数を利用しても SFCApplet 構造体へのポインタが返ってくるので互換性はありません。

例えば、BREW エクステンション側が単純に IDisplay へのポインタを必要としているのであれば、以下の例のようにアプリ内で自前の AEEApplet 構造体を確保し、メンバを初期化した後、その AEEApplet 構造体へのポインタを渡すという方法が考えられます。

<pre>
AEEApplet _brew_applet;

_brew_applet.m_pIDisplay = interface_cast(SFXGraphics::GetSFBDisplay().Get());

3d_function(3d, &amp;_brew_applet, ...);

// 必要に応じて他のメンバも初期化して渡します。
</pre>

※ この方法は、エクステンション側がインターフェースへのポインタを単純に参照するだけの場合は有効ですが、アプレット自身の参照カウンタを変更するような特殊な場合には正常に動作しない可能性があります。
]]></description>
         <link>http://www.s-cradle.com/developer/sophiaframework/reversefaq/000/sophiaframework_brew_aeeapplet.html</link>
         <guid>http://www.s-cradle.com/developer/sophiaframework/reversefaq/000/sophiaframework_brew_aeeapplet.html</guid>
         <category>000)プログラム全般</category>
         <pubDate>Fri, 12 Oct 2007 19:56:32 +0900</pubDate>
      </item>
            <item>
         <title>atomic_cast 演算子</title>
         <description><![CDATA[SophiaFramework 4.1.7 から atomic_cast 演算子が利用可能になりました。

atomic_cast 演算子は、<a href="http://www.s-cradle.com/developer/sophiaframework/sf_reference/sec.classreference.shape.html" title="22.3. 図形と色">図形と色</a>など AtomRec 構造体が定義されるクラスのポインターと、そのクラスの AtomRec 構造体のポインターを相互に変換するための型変換演算子です。

atomic_cast 演算子により、クラスのポインターは AtomRec 構造体のポインターへ、AtomRec 構造体のポインターはクラスのポインターへそれぞれ型変換されます。

以下は、atomic_cast 演算子を使ったサンプル コードです。 

<pre>
Void my_func(SFXRectangle rects[2]) 
{ 
  // 何らかの処理

  ......

} 


SFXRectangle::AtomRec rects[] = { 
  {0, 0, 100, 100}, 
  {0, 0, 50, 50} 
}; 


my_func(atomic_cast(rects)); 
</pre> ]]></description>
         <link>http://www.s-cradle.com/developer/sophiaframework/reversefaq/000/atomic_cast.html</link>
         <guid>http://www.s-cradle.com/developer/sophiaframework/reversefaq/000/atomic_cast.html</guid>
         <category>000)プログラム全般</category>
         <pubDate>Wed, 08 Aug 2007 12:05:23 +0900</pubDate>
      </item>
            <item>
         <title>BREW SDK 4.0.0 で開発する方法 (SophiaFramework 4.1.7)</title>
         <description><![CDATA[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 のリンカのファイルを変更します。

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

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

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

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

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

<pre>
■変更前 

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


■変更後 

static __inline int IRAMCACHE_Find(IRamCache* piRamCache,
                                   const char* cpKey, int nKeyLen,
                                   void* pVal, int* pnValLen)
{
    return AEEGETPVTBL(piRamCache,IRamCache)
            -&gt;Find(piRamCache,
                   cpKey, nKeyLen,
                   <strong>static_cast&lt;char *&gt;(pVal)</strong>, pnValLen);
}
</pre>

<pre>
■変更前 

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


■変更後 

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

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 アプリはコンパイルできません。]]></description>
         <link>http://www.s-cradle.com/developer/sophiaframework/reversefaq/000/brew_sdk_40_sophiaframework_41.html</link>
         <guid>http://www.s-cradle.com/developer/sophiaframework/reversefaq/000/brew_sdk_40_sophiaframework_41.html</guid>
         <category>000)プログラム全般</category>
         <pubDate>Wed, 08 Aug 2007 09:27:11 +0900</pubDate>
      </item>
            <item>
         <title>BREW SDK 4.0.0 で開発する方法 (SophiaFramework 4.1.6)</title>
         <description><![CDATA[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 のリンカのファイルを変更します。

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

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

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

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

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

<pre>
■変更前 

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


■変更後 

static __inline int IRAMCACHE_Find(IRamCache* piRamCache,
                                   const char* cpKey, int nKeyLen,
                                   void* pVal, int* pnValLen)
{
    return AEEGETPVTBL(piRamCache,IRamCache)
            -&gt;Find(piRamCache,
                   cpKey, nKeyLen,
                   <strong>static_cast&lt;char *&gt;(pVal)</strong>, pnValLen);
}
</pre>

<pre>
■変更前 

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


■変更後 

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

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 アプリはコンパイルできません。]]></description>
         <link>http://www.s-cradle.com/developer/sophiaframework/reversefaq/000/brew_sdk_40.html</link>
         <guid>http://www.s-cradle.com/developer/sophiaframework/reversefaq/000/brew_sdk_40.html</guid>
         <category>000)プログラム全般</category>
         <pubDate>Wed, 18 Jul 2007 18:00:17 +0900</pubDate>
      </item>
            <item>
         <title>独自のボタンを作成する</title>
         <description><![CDATA[SFRButtonBase クラスを継承して、独自のボタンを作成します。

<pre>
SFMTYPEDEFCLASS(UserButton)
class UserButton : public SFRButtonBase {
    // コピー禁止マクロ
    SFMSEALCOPY(UserButton)
  public:
    // コンストラクタとデストラクタの宣言
    UserButton(SFRResponderPtr, 
              SFXRectangleConstRef, BehaviorType);
    virtual ~UserButton(Void);
  private:
    // 描画ハンドラの宣言
    virtual  Void  HandleContent(SFXGraphicsPtr);
    // キー リリース ハンドラの宣言
    virtual  Void  HandleRelease(Void);
};

// コンストラクタ
UserButton::UserButton(SFRResponderPtr director, SFXRectangleConstRef rect, BehaviorType behavior)
: SFRButtonBase(director, rect, behavior, four_char_code('U', 's', 'e', 'r'))
{
  return;
}

// デストラクタ
UserButton::~UserButton(Void)
{
  return;
}
// 描画ハンドラ
Void UserButton::HandleContent(SFXGraphicsPtr graphic)
{
  SFXRGBColor  color;

  // 応答可能か
  if (GetInheritEnable()) {
    // フォーカスされているか
    if (GetInheritFocus()) {
       // キーが押されているか
      if (GetStatusPress()) {
        color.SetRGB(0x44, 0x44, 0x44);
      }
      else {
        color.SetRGB(0x66, 0x66, 0x66);
      }
    }
    else {
      color.SetRGB(0x88, 0x88, 0x88);
    }
  }
  else {
    color.SetRGB(0xAA, 0xAA, 0xAA);
  }
  
  // ボタンを描画する
  graphic-&gt;DrawRectangle(GetVirtualWorld(), color);
  
  return;
}

// キー リリース ハンドラ
Void UserButton::HandleRelease(Void)
{
  // SREVT_CONTROL イベントを自分自身に送信する
  Invoke(SFXEvent(SREVT_CONTROL, 0, 
         reinterpret_cast&lt;UInt32&gt;(this)));
  return;
}
</pre>

<pre>
// ウィンドウを生成する
window = ::new SFRPlainWindow(this, GetContentWorld());

// 独自のボタンを作成する
::new UserButton(window, SFXRectangle(10, 10, 40, 40));
</pre>]]></description>
         <link>http://www.s-cradle.com/developer/sophiaframework/reversefaq/050gui/post_118.html</link>
         <guid>http://www.s-cradle.com/developer/sophiaframework/reversefaq/050gui/post_118.html</guid>
         <category>050)GUIフレームワーク</category>
         <pubDate>Wed, 04 Jul 2007 19:01:40 +0900</pubDate>
      </item>
            <item>
         <title>方向キーでコントロールを選択する</title>
         <description><![CDATA[方向キーで「フォーカス」を制御してコントロールを選択します。コントロールは「フォーカス」が当たると色が変わります。

<pre>
// キー ハンドラ
HANDLER_IMPLEMENT_BOOLEVENT(MyWindow, OnKey, event)
{
    switch (event.GetP16()) {
        // フォーカスを移動する
        case AVK_UP:          // 上
            FocusUp();
            return true;
        case AVK_LEFT:       // 左
            FocusLeft();
            return true;
        case AVK_DOWN:     // 下
            FocusDown();
            return true;
        case AVK_RIGHT:    // 右
            FocusRight();
            return true;
    }
    return false;
}
</pre>]]></description>
         <link>http://www.s-cradle.com/developer/sophiaframework/reversefaq/050gui/cat177/post_116.html</link>
         <guid>http://www.s-cradle.com/developer/sophiaframework/reversefaq/050gui/cat177/post_116.html</guid>
         <category>コントロール</category>
         <pubDate>Tue, 03 Jul 2007 09:22:51 +0900</pubDate>
      </item>
      
   </channel>
</rss>
