[[← 1 節に戻る|Palm OS Programmer's Companion Volume I/6-1]] [[↑6 章トップへ|Palm OS Programmer's Companion Volume I/6]] [[3 節に進む →|Palm OS Programmer's Companion Volume I/6-3]] ---- !!!6-2 リソースマネージャ   アプリケーションはデータマネージャに似た、チャンクの取得と保存に便利なリソースマネージャを利用することができます。リソースマネージャは一意なリソースタイプとリソースIDで各データチャンクをタグ付けする機能を持っています。これらのタグ付けされたチャンクはリソースと呼ばれ、リソースデータベースに保存されます。リソースデータベースは通常のデータベースとほぼ同じ構造ですが、リソースレコードあたり2バイトのわずかなストレージオーバーヘッドがあります。実際、リソースマネージャは概念的な理由のみから抽出されたデータマネージャ関数のサブセット以上のものではありません。 リソースは通常、画像やフォント、ダイアログレイアウトなど、アプリケーションのユーザーインターフェース要素を格納するために使用されます。アプリケーションの構築にはこれらのリソースを作成して実際の実行コードにマージする作業が含まれます。Palm OS の環境では、アプリケーションは実際にはシンプルなリソースデータベースであり、1つ以上のコードリソースとして保存された実行コードと、その他のリソースタイプで同じデータベースに保存された画像などのデータが含まれています。 アプリケーションはプリファレンスやウィンドウ位置、状態情報などの取得や保存にもリソースマネージャが便利であることに気付くかもしれません。これらのプリファレンスは別のリソースデータベースに保存することができます。 このセクションではリソースマネージャの使い方を説明します。以下のトピックがあります。 *リソースデータベースヘッダの構造 *リソースマネージャの使用 *リソースマネージャ関数 訳注:上記のように3つのトピックが列挙されていますが、    原著では3つ目の「リソースマネージャ関数」は    [[4 節|Palm OS Programmer's Companion Volume I/6-3]]にリンクされています。   !!リソースデータベースヘッダの構造 リソースデータベースヘッダは、いくつかの一般的なデータベース情報とデータベース内のリソースのリストで構成されています。ヘッダの最初の部分は通常のデータベースヘッダと同じ構造になっています。リソースデータベースヘッダは attributes フィールドの dmHdrAttrResDB ビットの状態によって通常のデータベースヘッダと区別されます。 ::IMPORTANT :::リソースデータベースヘッダの構造は将来変更される可能性があります。リソースデータベースを使用する場合は API を使用して下さい。 *name フィールドはリソースデータベースの名前を保持しています。 *attributes フィールドはデータベースのフラグを保持しており、dmHdrAttrResDB ビットは常にセットされています。 *データベース内のリソースが削除、追加、あるいは変更されるたびにインクリメントされる modificationNumber フィールド。これにより、アプリケーションは共有リソースデータベースが他のプロセスによって変更されたことを素早く検出できます。 *appInfoID と sortInfoID フィールドは通常リソースデータベースでは必要ありませんが、普通のデータベースと構造を同じにするために含まれています。アプリケーションは必要に応じて自由な目的にこれらのフィールドを使用できます。 *type と crerator フィールドは、そのデータベースを作成したアプリケーションが定義した 4 バイトのデータベースタイプとクリエータ情報を保持します。 *numResources フィールドはヘッダに保存されているリソース情報エントリの数を保持します。ほとんどの場合、これはリソースの数を表します。ただし、全リソース情報エントリがヘッダに収まらない場合、次のリソース情報エントリのセットを格納する resourceList のチャンクIDが nextResourceList に格納されます。 ヘッダ内の 10 バイトのリソース情報エントリは、それぞれがリソースタイプ、リソース ID、およびリソースデータを含むメモリマネージャチャンクのローカル ID を保持しています。   !!リソースマネージャの使用 通常のレコードベースのデータベースを作成するのに使用した関数を使って、リソースデータベースの作成、削除、オープン、クローズを行うことができます([[“データマネージャの使用”|Palm OS Programmer's Companion Volume I/6-1]]を参照)。これにはデータマネージャの全てのデータベースレベル(レコードレベルではありません)の関数が含まれます。例えば DmCreateDatabase、DmDeleteDatabase、DmDatabaseInfo などです。 DmCreateDatabase を使って新しいデータベースを作成する際、作成されたデータベースの種類( レコードかリソースか )は resDB パラメータの値に依存します。このパラメータがセットされている場合、リソースデータベースが作成され、データベースヘッダの attributes フィールドに dmHdrAttrResDB ビットがセットされます。データベースヘッダ ID を使って DmDatabaseInfo をコールし、返される attributes フィールドの値の dmHdrAttrResDB ビットを検査することでそのデータベースの種類を確認することができます。 リソースデータベースがオープンされると、アプリケーションはリソースマネージャのリソースベースのアクセス関数を使用してデータベースのリソースを取得あるいは操作できます。一般に、アプリケーションは DmGetResource 関数と DmReleaseResource 関数を使用します。 DmGetResource は、指定されたタイプと ID に合致するリソースのハンドルを返します。この関数は全てのオープンされているリソースデータベースから指定されたタイプと ID を持つリソースを検索し、そのハンドルを返します。検索は最後にオープンされたデータベースから開始されます。全てのオープンされているデータベースではなく最後にオープンされたデータベースだけを検索するには、DmGet1Resource 関数をコールします。 アプリケーションがリソースデータの読み書きを終了したら、すぐに DmReleaseResource をコールします。リソースをリサイズするには、DmResizeResource をコールします。この関数はリソースのハンドルを受け取り、それを必要なら同一カード内の別のヒープに再アロケートします。この関数はリソースのハンドルを返しますが、リサイズのために別のヒープに移動する必要があった場合、ハンドルが変更されている場合があります。 その他のリソースマネージャ関数は、通常ほとんどのアプリケーションでは必要ありません。これには、リソースの属性を取得・設定する関数、リソースを別のデータベースに移動する関数、リソースをインデックス指定で取得する関数、および新しいリソースを作成する関数などが含まれます。これらの関数のほとんどはパフォーマンスの最適化のためにリソースをインデックスで指定します。リソースをインデックスで指定する場合、リソースが所属しているリソースデータベースの DmOpenRef 値を併せて指定する必要があります。タイプと ID、またはポインタを指定して全てのオープンされているリソースデータベースからリソースを検索するには DmSearchResource 関数をコールします。 オープンされているリソースデータベースの最上位の DmOpenRef を取得するには、パラメータの DmOpenRef 値に NULL を指定して DmNextOpenResDatabase をコールします。後続するそれぞれのデータベースの DmOpenRef 値を取得するには、直前の DmOpenRef 値を指定して繰り返し DmNextOpenResDatabase 関数をコールします。 特定のリソースデータベースのアクセスポインタを指定することにより、DmFindResource を使って指定されたタイプと ID を持つリソースのインデックスを取得できます。DmFindResourceType を使えば、与えられたタイプを持つ全てのリソースのインデックスを取得できます。インデックスからリソースハンドルを取得するには、DmGetResourceIndex をコールします。 データベースにどれだけのリソースが含まれているかを取得するには、DmNumResources をコールします。タイプと ID を含むリソースの属性を取得・設定するには、DmResourceInfo と DmSetResourceInfo をコールします。既存のデータチャンクを新しいリソースとしてリソースデータベースに追加するには DmAttachResource をコールします。データベースからリソースを取り外すには DmDetachResource をコールします。 新しいリソースを作成するには、DmNewResource をコールして希望のサイズ、タイプ、ID を渡します。リソースを削除するには DmRemoveResource をコールします。リソースの削除により、そのデータチャンクは破棄され、データベースヘッダからはエントリが削除されます。   ---- [[← 1 節に戻る|Palm OS Programmer's Companion Volume I/6-1]] [[↑6 章トップへ|Palm OS Programmer's Companion Volume I/6]] [[3 節に進む →|Palm OS Programmer's Companion Volume I/6-3]]