あまつぶ

3.11 【CarbonLib 1.2.5 SDKを導入】

 CarbonLib 1.1以降はMacOS 8.6以降じゃないと使えないということだったのでCarbonLib 1.2 SDKおよび1.2.5はダウンロードしただけでさわっていなかった。が、1.0.4ではCarbon Event Managerに対応できないので、これまでのヘッダファイルなどをバックアップした上で1.2.5を導入してみることに。
 Carbon Supportフォルダを開いてみると、CarbonLibHeadersPreCompiledというフォルダを発見。1.0.4にはなかったような。ヘッダ部分をあらかじめコンパイルしておいてソースのコンパイルを早くするためのもの(正確には違うかもしれないけど、解釈はこんなもんだと思う)らしいのだけど、使おうと思ったらOpenTransport関係のヘッダファイルが古いみたいで使えず。OTの新しいSDKって出ているのかしら。っていうか、あれ? Universal Interfacesにコピーしたファイルの一部はOpenTransportフォルダに入っていたものと同じだ。ってことは、明示的にこっちを使うように指定してやるか入れ替えるかしたらできるかな。と、うまくいった。あとで使ってみよう。
 早速IconPartyのプロジェクトを立ち上げてコンパイルしてみる。ヘッダファイルがごそっと入れ替わったので、すべてのファイルがコンパイルしなおされる。と、エラーがどどどどーっと発生。うーん、やはり簡単にはいかないか。

 まず目立ったのは前回ProjectBuilderの時に書いたのと同じように、〜Procがすべてエラーになったこと。前回はリンクの時にエラーが出たと書いてあるけど、今回はコンパイル時にいきなりエラーだった。とりあえず、〜UPPに置換してことなきを得る。
 あとは、Tools.cでBeginFullScreenが未定義というエラーが出た。1.2.5になってつかなくなったなんてことはないはずだし……、と試しにMovies.hをインクルードしてみたら回避できた。前はしてなくてもいけたんだけど、変なの。
 Carbon版はこのくらいの変更でうまくいったのだけど、Classic版はいろいろと問題が発生。これまでCarbon環境以外では未定義だったSetPortDialogPortなどが定義されたようで、二重定義で怒られた。今までの環境と互換性をとるため、#ifndef SetPortDialogPortと#endifで挟んで一応対処。困ったのは、GetWindowPortBoundsがヘッダファイルでは定義されているのにライブラリにはないこと。CarbonAccessors.oに入っているのはわかるが、68kコードの場合はどうしたらいいのだ??
 しかたないので、MacWindows.hを書き換えて#if powercの時だけ定義させるようにした。他にはそういう箇所は見つからなかったので単なるミスだとは思うが、もう68kアプリはサポートされないっていう意味なのかと思ってしまった。うーん。

 PhutやQT-Qも同様にコンパイル成功。IconParty carbonを8.6+CarbonLib 1.2.5で動作させた時にアバウトダイアログが表示されないという問題を見つけてしまったが、それ以外の部分はちゃんと動いてくれているようだ。

 前回書いた、CodeWarriorとProjectBuilderでソースを共有する方法について少し。ヘッダファイルを見ていたら#if defined(__MWERKS__)なんて書いてあるところがあったので、#include部分はこれで判別できそうだ。Rezの方はこの手が使えないみたいなのでまた別の方法を考えないといけないようだけど。
 cInfoWindowとかcAliasFileについては進展なし。CarbonLib 1.2.5 SDKについてきたファイルでは定義されていた。Finder自体が大きく変わるからFinderRegistry.hも変わるのだろうけど、ないってのはないやん。どうなるんだろ、一体。


March 4, 2001 ↑ March index → March 18, 2001