Palm Programmer's Laboratory

トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

Palm OS Programmer's Companion Volume I/1-4

← 3 節に戻る ↑1 章トップへ 5 節に進む →


1-4 アプリケーションを様々なデバイスで動作させるには

 
Palm OS が動作するハンドヘルドにはたくさんの種類があり、それらには異なるバージョンのOSがインストールされている場合があります。ユーザーはデスクトップコンピュータでするほどには頻繁に Palm OS のアップグレードをしないものです。このことは、Palm OS アプリケーションにおける下位互換性を非常に重要なものにします。

このセクションでは、以下の点を検討することによって、アプリケーションをできるだけ多くのハンドヘルドで動作させるための方法について説明します。

  • 新しいアプリケーションを古いデバイスで動作させる
  • PalmOSGlue ライブラリを使った下位互換性
  • 最新の SDK での古いアプリケーションのコンパイル

 

新しいアプリケーションを古いデバイスで動作させる

Palm OS の各バージョンは相互にバイナリ互換性を持っています。もし今新しいアプリケーションを作成したとしても、そのアプリケーションが新しい機能をまったく使っていなければすべてのバージョンの OS で動作するでしょう。言い換えれば、アプリケーションが Palm OS 1.0 で利用できる機能しか使っていなければ、全てのハンドヘルドで動作するということです。もし 2.0 の機能を使っていれば、そのアプリケーションは最初期のハンドヘルドでは動作しませんが、それ以外の全てのデバイスで動作するということになります。

どのバージョンの OS でどの機能が使えるのかを、どうやって調べればいいのでしょうか? これには2通りの方法があります。

  • The Palm OS Programmer's API Reference 」 には“互換性ガイド”という付録があります。このガイドにはバージョン 1.0 以降の OS においてそれぞれの機能や関数がどのバージョンから導入されたのかがリストになっています。
  • ヘッダファイル SysTraps.h ( Palm OS 3.5 以降であれば CoreTraps.h ) には、利用可能なシステムトラップが全てリストされています。トラップはシステムに導入された順にリストされており、ファイル内のコメントによってそれぞれのバージョンの OS がどこから始まっているのかが明確になっています。

プログラム的には、フィーチャマネージャを使うことでアプリケーションが動作しているシステムで利用できる機能を調べることができます。OS のバージョン番号だけでは特定の機能が使えるとは限らないことに注意して下さい。例えば、Palm OS 3.2 からワイアレス通信のサポートが導入されましたが、全てのハンドヘルドで無線通信が可能なわけではありません。つまり、システムのバージョンが 3.2 かどうかをチェックするだけでは、ワイアレス通信機能がサポートされているという保証にはならないのです。それぞれの機能の存在をチェックする方法については、「 The Palm OS Programmer's API Reference 」 の“互換性ガイド”を参照して下さい。

 

PalmOSGlue ライブラリを使った下位互換性の維持

PalmOSGlue ライブラリを使えば、最新の API セットを使いながら以前のリリースとの下位互換性を維持することができます。PalmOSGlue は一部のユーザーインターフェースマネージャコールと、ローカライゼーションや国際化を可能にするマネージャの下位互換性を提供します。

PalmOSGlue は Palm OS 2.0 以降であればどのアプリケーションでも利用できます。このライブラリは最新のローカライゼーション機能と内部 UI 構造体へのアクセスをサポートします。このライブラリを利用するには、PalmOSGlue ライブラリ( PalmOSGlue.lib または libPalmOSGlue.a )をリンクします。

PalmOSGlue を使用する場合、「 The Palm OS Programmer's API Reference 」に記述されているのと同じ方法で関数を使用しますが、関数名が異なっています。例えば、TxtFindString 関数は PalmOSGlue では TxtGlueFindString という名前になっています。glue 関数をコールする場合( 例えば TxtGlueFunc、FntGlueFunc、WinGlueFunc など )、PalmOSGlue の内部では ROM 内の適切な API 関数を呼び出します。もし対応する関数がなければ等価な関数を実行します。

PalmOSGlue ライブラリ関数の完全なリストについては、「 The Palm OS Programmer's API Reference 」の “PalmOSGlue ライブラリ”の章を参照して下さい。

PalmOSGlue はアプリケーションにリンク時に結合しなければならないライブラリです。シェアードライブラリではありません。PalmOSGlue はアプリケーションのコードサイズを大きくします。実際に増加するサイズはコールされる glue 関数の数によります。リンカーは使用されないルーチンとデータを削除します。

 

最新の SDK での古いアプリケーションのコンパイル

基本的には、初期バージョンの Palm OS SDK を使用して開発されたアプリケーションは全て最新のデバイスでも問題なく動作するはずです。

古いアプリケーションを最新の SDK でコンパイルしたい場合は、API の変更された関数を調べる必要があります。このような関数は、V10 や V20 といった、サポート対象の OS を示す接尾詞が付加されて残っています。

以下の2つの選択肢があります。

  • 古い API を使用し続けるために関数名を変更します。アプリケーションは新しいハンドヘルドでも問題なく動作します。
  • 新しいAPIを使用するためにアプリケーションをアップデートします。アプリケーションは問題なく動作する上に一部の新しい機能も使用できるようになります。しかし、それ以前のOSを搭載している古いハンドヘルドでは動作しなくなってしまいます。
NOTE
古いアプリケーションを Palm OS 3.5 以降の SDK でコンパイルしようとした場合、いくつかのヘッダファイルの名前が変更されていることに注意して下さい。また、基本型の名前も変更されています。例えば、以前は Word と書かれていたパラメータは、現在では UInt16 や Int16 になっています。既存のアプリケーションをコンパイルする場合は、コードに対してこれらの変更を行うか、PalmOSCompatibility.h をインクルードする必要があります。詳細については、「 The Palm OS Programmer's API Reference 」 の“互換性ガイド”を参照して下さい。

 


← 3 節に戻る ↑1 章トップへ 5 節に進む →