高度な検索
Developer Connection
Member Login ログイン | ご入会 ADC連絡先

PPCSYS 08 - 68KコードのPPCへの移植とNewRoutineDescriptor

(1-June-96)

Q: 68KコードをPPCに移植しようとしています。ModalDialogで定義されているカスタム関数を使用しています。そのときのコードは以下のようでした。

ModalDialog((ModalFilterProcPtr) MyFilter, &itemNum);

カスタム関数をRoutineDescriptorへのポインタ型に変換できない、とコンパイラがエラーを返してきたので、RoutineDescriptorにキャストしました。
ModalDialog((RoutineDescriptor*) MyFilter, &itemNum);

これでコンパイル時とリンク時のエラーはなくなりましたが、プログラムを実行するとタイプ3のエラーでクラッシュしてしまいます。

これを正しく実装するには、どの様にしたらよいのでしょうか?

A: UPPにキャストするのではなく、NewRoutineDescriptorを使用してUPPを作成してください。Dialogs.hには、NewRoutineDescriptorを実行するためのNewModalFilterProcというマクロがあります。コードは以下のようになります。

ModalFilterUPP myFilterUPP;
myFilterUPP = NewModalFilterProc(MyFilter);
ModalDialog(myFilterUPP,  &itemNum);

以下もご参照ください。

より詳しい情報については、Inside Macintosh: PowerPC System Software 2-21ページのUsing Universal Procedure Pointersをご覧ください。


[ Technical Q&A's : PowerPC : PowerPC Systems : PPCSYS008 ]