前のページ次のページ上に戻るホーム BREW C++ ライブラリ & GUI フレームワーク & XML ミドルウェア : SophiaFramework 4.1

8.2. アプリの起動

Onlybootup アプリは、起動する以外何も行わないアプリです。このアプリのコードを使って、SophiaFramework アプリの起動時の処理について解説します。

例 8.5. Onlybootup アプリ : .cpp ファイル ( ブート ローダとファクトリ関数の実装、ハンドラの実装と登録 )

//
//      Onlybootup.cpp
//
//      This source code was automatically
//      generated by SophiaFramework 4.1.
//

#include "Onlybootup.hpp"

// ブート ローダ
SFCApplet::FactorySPP SFCApplet::Boot(AEECLSID id, SFXAnsiStringPtr license)
{
    *license = "heap://";

    return (id == AEECLSID_ONLYBOOTUP) ? (&Onlybootup::Factory) : (null);
}

// ファクトリ関数
SFCInvokerPtr Onlybootup::Factory(Void)
{
    return ::new Onlybootup;
}

// コンストラクタ
Onlybootup::Onlybootup(Void) static_throws
{
    return;
}

// デストラクタ
Onlybootup::~Onlybootup(Void)
{
    return;
}

SFRApplication クラスを継承する Onlybootup アプリ クラスが、このアプリの処理の中心となります。

Onlybootup のアプリの起動は、ブート ローダ と呼ばれる SFCApplet::Boot 関数の呼び出しから始まります。

SFCApplet::Boot 関数では、アプリの ClassID に対応するライセンスコードを設定し、 Onlybootup アプリ クラスのインスタンスを生成するための Onlybootup::Factory 関数のアドレスを返します

次に Onlybootup::Factory 関数が実行され、 Onlybootup アプリ クラスの Onlybootup::Onlybootup コンストラクタによって Onlybootup アプリ クラスのインスタンスを一度だけ生成します。 その後、SFEVT_APP_START イベントが Onlybootup アプリに送信され、Onlybootup アプリの起動は完了します。 なお、Onlybootup アプリ クラスのインスタンスはアプリ終了時に自動的に破棄されます。

※ SophiaFramework では複数の ClassID に個別のアプリ クラスをバインドできます。 ClassID を切り替えて複数のアプリを起動するコードを以下に示します。

例 8.6. 複数アプリの起動 : .hpp ファイル ( クラスの定義 )

//
//      Twin.hpp
//
//      This source code was automatically
//      generated by SophiaFramework 4.1.
//

#ifndef __TWIN_HPP
#define __TWIN_HPP

#include <SophiaFramework.hpp>
#include "TwinA.bid"
#include "TwinB.bid"

SFMTYPEDEFCLASS(TwinA)
class TwinA : public SFRApplication {
    SFMSEALCOPY(TwinA)
public:
    static SFCInvokerPtr Factory(Void);
private:
    TwinA(Void) static_throws;
    virtual ~TwinA(Void);
};

SFMTYPEDEFCLASS(TwinB)
class TwinB : public SFRApplication {
    SFMSEALCOPY(TwinB)
public:
    static SFCInvokerPtr Factory(Void);
private:
    TwinB(Void) static_throws;
    virtual ~TwinB(Void);
};

#endif // __TWIN_HPP //

例 8.7. 複数アプリの起動 : .cpp ファイル ( ブート ローダとファクトリ関数の実装、ハンドラの実装と登録 )

//
//      Twin.cpp
//
//      This source code was automatically
//      generated by SophiaFramework 4.1.
//

#include "Twin.hpp"

// ブート ローダ
SFCApplet::FactorySPP SFCApplet::Boot(AEECLSID id, SFXAnsiStringPtr license)
{
    SFCApplet::FactorySPP result(null);

    switch (id) {
    	case AEECLSID_TWINA:
             result = &TwinA::Factory;
             *license = "heap://"
                        "TIXDRQXNU5WHU8 ・・・・・・・・・
                        ・・・・・・・・・ LUGEW3U98TLDR8";
             break;
        case AEECLSID_TWINB:
             result = &TwinB::Factory;
             *license = "heap://"
                        "DHDV5CR1S4XASC ・・・・・・・・・
                        ・・・・・・・・・ TQS6UHVFVEVLU3R";
             break;
	}
    return result;
}

// ファクトリ関数
SFCInvokerPtr TwinA::Factory(Void)
{
    return ::new TwinA;
}

// コンストラクタ
TwinA::TwinA(Void) static_throws
{
    return;
}

// デストラクタ
TwinA::~TwinA(Void)
{
    return;
}

// ファクトリ関数
SFCInvokerPtr TwinB::Factory(Void)
{
    return ::new TwinB;
}

// コンストラクタ
TwinB::TwinB(Void) static_throws
{
    return;
}

// デストラクタ
TwinB::~TwinB(Void)
{
    return;
}