OPS 15 - PowerPC コードからコントロールバーのルーチンを呼び出す (更新日: 97 年 3 月 14 日)
Q: ヘッダファイル <ControlStrip.h> で定義されている SBIsControlStripVisible() および SBShowHideControlStrip() ルーチンを呼び出そうと思います。しかし、PowerPC コードとリンクしようとすると、これらのルーチンに対するリンクエラーが返されてしまいます。これらのルーチンは、どのライブラリにインプリメントされているのですか。
A: コントロールバー呼び出しに対応する PowerPC ライブラリは存在しません。このため、ルーチン記述子を作成し、68K ライブラリへのミックストモード呼び出しを実行する必要があります。
次に、PowerPC コードからコントロールバールーチンを呼び出すことのできるサンプルプログラムを示します。
/* 現在のユニバーサルヘッダで定義されている */
#ifndef _ControlStripDispatch
enum {
_ControlStripDispatch = 0xAAF2
};
#endif
#if GENERATINGCFM
/* */
/* CFM を生成していない場合は、ヘッダ内の */
/* 68K インラインの適用が前提になる */
/* */
#include
#include
pascal Boolean SBIsControlStripVisible ( void );
pascal void SBShowHideControlStrip(Boolean showIt);
/* SBIsControlStripVisible は Pascal ルーチンで */
/* D0 のセレクタからディスパッチされ */
/* 戻り値として論理値を返す */
pascal Boolean SBIsControlStripVisible ( void )
{
enum
{
uppSBIsControlStripVisibleInfo = kD0DispatchedPascalStackBased
| RESULT_SIZE (SIZE_CODE (sizeof(Boolean)))
| DISPATCHED_STACK_ROUTINE_SELECTOR_SIZE (kFourByteCode)
};
return CallUniversalProc (
GetToolTrapAddress (_ControlStripDispatch),
uppSBIsControlStripVisibleInfo, 0x00);
}
pascal void SBShowHideControlStrip(Boolean showIt)
{
enum
{
uppSBShowHideControlStripInfo =
kD0DispatchedPascalStackBased
| DISPATCHED_STACK_ROUTINE_SELECTOR_SIZE (kFourByteCode)
| DISPATCHED_STACK_ROUTINE_PARAMETER
(1, SIZE_CODE (sizeof (showIt)))
};
CallUniversalProc (
GetToolTrapAddress (_ControlStripDispatch),
uppSBShowHideControlStripInfo, 0x01, showIt);
}
#else /* GENERATINGCFM でない */
#include
#endif /* GENERATINGCFM */
-- Brian Bechtel
devsupport@apple.com
[ Technical Q&A's : Operating System Services : OS Utilities : OPS15 ]
|