Palm OS Programmer’s Companion Volume I/14-3 - project-enigma

Palm OS Programmer’s Companion Volume I/14-3

>> Site top >> Misc >> In my palm >> Palm開発ドキュメントの和訳 >> Palm OS Programmer’s Companion Volume I >> Palm OS Programmer’s Companion Volume I/14-3

最終更新日付:2014/01/01 00:00:00

← 2 節に戻る ↑14 章トップへ 4 節に進む →

14-3 ARM ネイティブサブルーチンの呼び出し

 

68Kアプリケーションから ARM ネイティブのサブルーチンをコールするには、新しい関数 PceNativeCall を使用します。

PceNativeCall 関数は2つの引数をとります。

  1. ARM ネイティブ関数のポインタ。これは通常はコードリソースに保存されています。ARM ネイティブサブルーチンがリソースに保存されている場合、68Kアプリケーションは単純に DmGetResource を使用してリソースを取得し、MemHandleLock を使用してそのリソースをロックすることで ARM ネイティブサブルーチンのポインタを取得できます。
  2. データブロックを指すポインタ。これにより、68Kアプリケーションは ARM ネイティブサブルーチンとデータを交換することができます。

PceNativeCall をコールする前に、プロセッサタイプを確認する必要があります。

リスト 14.1 にこのプロセスを示します。わかりやすさのために、この例では ARM 関数にはパラメータを渡していません。

リスト 14.1 ARM 関数のコール

static UInt32 PceNativeResourceCall(DmResType resType, DmResID resID,
                                    char *DLLEntryPointP, void *userCPB) {
    UInt32 processorType;
    MemHandle armH;
    MemPtr armP;
    UInt32 result;

    // get the processor type
    FtrGet(sysFileCSystem, sysFtrNumProcessorID, &processorType);
    if (sysFtrNumProcessorIsARM(processorType)){
        // running on ARM; call the actual ARM resource
        armH = DmGetResource(resType, resID);
        armP = MemHandleLock(armH);

        result = PceNativeCall(armP, userCPB);

        MemHandleUnlock(armH);
        DmReleaseResource(armH);

    } else if (processorType == sysFtrNumProcessorx86) {
        // running on Simulator; call the DLL
        result = PceNativeCall((NativeFuncType *)DLLEntryPointP, userCPB);

    } else {
        // some other processor; fail gracefully
        ErrNonFatalDisplay("Unsupported processor type");
        result = -1;
    }

    return result;
}

 

各種のプロセッサタイプのための( 全て sysFtrNumProcessor〜 で始まる名前の )#define が SystemMgr.h で定義されています。

 

 

 

← 2 節に戻る ↑14 章トップへ 4 節に進む →

 

 


Copyright(C) 2005-2017 project-enigma.
Generated by CL-PREFAB.