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



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 ]