タイトル | 【小池邦人のプログラミング日記】2000/7/11<Mac OS Xへの道 Carbon対応の実際(1)> | カテゴリー | Carbon/CF, 小池邦人のプログラミング日記 |
作成日 | 2000/7/12 11:43:11 | 作成者 | 新居雅行 |
既存のソースコードをCarbon APIに対応させ、Mac OS X環境でも起動できるアプリケーションを完成させるのには、いくつもの工程が存在します。 (1)必要のないAPIの削除 (2)MacOS 8/9で導入された新APIの利用 (3)WinodwPtrとGrafPortを明確に区別 (4)アクセッサーファンクションの利用 (5)Print Manager関連のAPIを変更 (6)Scrap Manager関連のAPIを変更 (7)Mac OS Xメニューモデルへの変更 (8)新しいイベントモデルへの変更 (9)Mac OS Xに対する最適化 これらの工程は、今後Apple社から発表される技術内容(Mac OS Xβ版とか...)によっても変化する可能性があります。また、Carbon化するアプリケーションのタイプによっては省略できる工程もあります。例えば、プリントアウトの必要ないアプリケーションの場合には、(5)の工程を行う必要はありません。加えて、Mac OS 8/9環境のみで動作するCarbonアプリケーション(意味があるかどうかは別にして...)の開発には、(7)から(9)の工程は必要ありません。 ただし、どのアプリケーションに関しても最低限(1)から(4)までの工程は必要です。また、それらの工程はそれぞれが相互に関係していますので、4つの工程を同時進行で進めても良いと思います。ひとつのソースファイルをコンパイルし、表示されたシンタックス以外のエラー(APIや定数が定義されていないとか...)を調査して順次対処していきます。この時の参考となるが、Apple社が提供している各Managerに対するドキュメント(PDF)ですが、それ以上に、エラー箇所に関係するManagerのヘッダーファイルが手助けとなります。例えば、Window Manager関連のAPIについてコンパイルエラーが表示された場合には、MacWindows.hを参照してみます。そのソースコードの中で、 #if CALL_NOT_IN_CARBON と #endif /* CALL_NOT_IN_CARBON */ ではさまれた箇所に記載されているAPI、定数、構造体は、Carbon環境では一切使用できませんので注意してください。また、コメントとして... /* Routines available in Mac OS 8.5 and later*/ とか /* Routines available in Carbon and later*/ などと記載されている箇所は、Mac OS 8.5以降の環境やCarbon環境のみで利用できるAPI、定数、構造体であることを示しています。 では、各工程を一つ一つ検証していくことにします。 (1)必要のないAPIの削除 今まで特定の箇所に実装してきたAPIのうち、Carbon環境では実装する必要がない物があります。例ば、一番最初(多分、main()ルーチン)に実行していたInitGraf()やInItFonts()、InitWindows()、InitMenus()、TEInit()、InitDialogs()といった各Manager初期化ルーチンは、すべて実装する必要はありません。メニュー関連ですと、アップルメニューに項目を加えるAppendResMenu()とか、そのメニュー項目を起動させるOpenDeskAcc()なども必要ありません。Carbon環境では、これらはすべてOS側が自動的に行います。 同様にイベント関連のSystemtask()や、Text Servic ManagerのTSMEvent() やTSMMenuSelect()といったAPIも実装する必要はありません。それから、Carbon環境ではQuickDraw 3DのAPIは一切サポートされていませんので、もしアプリケーションがそれらを利用していると、OpenGLルーチンか独自のルーチンに切り換える必要があります。QuickDraw 3Dファンへの朗報として、「Quesa」というOpenGL上のQuickDraw 3Dコンパチブル・ライブラリが開発されつつあるようです。興味ある方は以下のサイトを覗いてみてください。 http://www.quesa.org/ (2)MacOS 8/9で導入された新APIの利用 例えば、未だにソースファイルにMac OS 7用コードが多数含まれている場合には、最低限Mac OS 8で導入されたAPIへ、最善作としてはMac OS 9で導入されたAPIへ切り換えておく必要があります。Mac OS 7からMac OS 8へ切り替わった時、ヘッダーファイルに定義されているAPIや定数の名称も大きく変更されました。例えば、Mac OS 7ではGetDItem()という名称がでしたが、Mac OS 8ではGetDialogItem()とう名称に変わっています。こうした名称変更は、Control Manager、Menu Manager、Dialog Mnager、Resource Mangerなどに多数存在します。ソースコードがMac OS 8対応になったら、続いてMac OS 8.5、Mac OS 8.6、Mac OS 9.0で新規に追加されたAPIを勉強してみてください。Apple社のデベロッパーサイトからドキュメントをダウンロードして読むと、最近のOSバージョンの変遷で、いかに多くのAPIが追加されてたのかに驚かされるかもしれません。 ちなみに、古いAPIでもCarbon環境で利用できるものは、そのまま利用していても構いません。例えばウィンドウ作成するAPIとしては古くからNewCWindow()がありますが、これを最新のCreateNewWindow()に置き換えることが可能です。かといって、Carbon環境でNewCWindow()が使えないわけではありません。ただし、将来的にMac OS X対応アプリケーションとするならば、CreateNewWindow()に切り換えられることをお薦めします。また例外的に、旧APIの使用がまったくダメな物もあります。それはStandard File Packgeです。CarbonLibではStandardPutFile()やStandardGetFile()といったお馴染みのAPIは利用できません。これらは、Navigation ServiceのNavGetFile()やNavPutFile()に必ず切り換える必要があります。 (3)以降の工程については、次回に詳しくお話しする予定です。 | |
関連リンク | オッティモ |