あまつぶ

2.23 【Carbon対応へ】

 Carbonの件の続き。2.18に古いサンプルプログラムがうまく動かなかったということを書いたが、つくりかけのPhutのCarbonバージョンでも同様の結果だった。プログラムを実行すると、直後にデバッガに落ちてしまうのだ。
 不思議なのは、IDEでデバッグしようとすると正常に動作すること(といっても、まだちゃんと動くわけではないのでなんとも言えないが)。また、デバッガに落ちた状態から「G」で復帰できること、プログラム自体の「main」が呼ばれるよりも前にデバッガに落ちていることもわかった。
 1.0.2 SDKについていたサンプルプログラムの方はなんの問題もなく動いた。ということは、原因はプロジェクトの設定かも知れない。そこで、サンプルの設定と同じになるようにいろいろいじってみたのだがまったく症状は変わらず。ドキュメントになにか書かれていないか探してみたが、関係のありそうなことは……MacOS Xで動くようにするためには'carb'リソースが必要だということと、OS 8や9で動かすために必要なメモリが若干増えるということくらい。リソースの方は試してみてもやはり効果はなく、だめもとで割り当てメモリを増やしてみると……なんと、動いたのだった。

 さらに驚いたのは、今まではパレットが開かれたところで動作がおかしくなってしまったのに今回はその先も「ほぼ」正常に動いたことだ。なぜかアプリケーションを切り替えるとパレットが隠されてしまうこととパレットがドラッグできないことを除けば、なんの問題もなし。CarbonLibの古いバージョンの時も、メモリを増やせばちゃんと動いたのかも知れない。新しいバージョンでは、メモリが足りないという警告をするためにデバッガに落ちるようになったのかも知れない。
 ようやくCarbon上でそれなりに動くプログラムが作れたのだが、今後の課題も多い。アプリケーションを切り替えると自動的にパレットが隠されてしまうというのはランチャとしては致命的だ。通常、アプリケーションのフローティングパレットというのはサスペンド時に隠されるのがふつうだからそういう意味では正しい動作なのだが……。「自動的に」というところが厄介で、なんとかできるのかどうか調査が必要だな。
 パレットがドラッグできないのは、WindowExtensions.cのDragReferencedWindow()で使われているGetWMgrPort()がCarbonから使用できないため、このルーチンを無効にしてあるのが原因。DragWindow()で対応できるのかも知れないが、ウィンドウのハイライトがどう処理されるかが問題か。
 そうだ。プログラム自体の問題ではないけど、Carbonアプリケーションで「Navi iRae」の機能を使用するとデバッガに落ちてしまうようだ。Phutだけではなく、サンプルプログラムでも同じことが起こったからたぶんそういうことなのだと思う。試したバージョンは1.6.1で、ひょっとしたらもっと新しいバージョンが出ているのかも知れないけど。


February 18, 2000 ↑ February index → February 24, 2000