|
|
Log In | Not a Member? |
Contact ADC |
| < Previous PageNext Page > |
“「ロード」”で解説しているように、状況によっては、弱いリンクを使ってオブジェクトコードが正常にロードされる場合があります。しかしそうした場合、一部の関数呼び出しが現在のシステムで提供されていないために、それらが未定義となる可能性があります。正常に実行するためには、システムバージョンでサポートされていない関数を、コードの中で呼び出すのを避ける必要があります。これを行うには、実行時にシステムバージョンを確認して、バージョンに応じて全体として異なるコードパスを実行するか、または、関数の呼び出し前に、各関数ポインタの値がNULLでないかどうか確認します。
たとえば、Mac OS Xバージョン10.3(Panther)の機能を使用するようにアプリケーションをビルドする一方で、Mac OS Xバージョン10.2(Jaguar)までさかのぼってデプロイメントを行うとします。Pantherで初めて使用可能になったHIAboutBox関数を使用するには、次のようなコードを使用できます。
Listing 2-1 NULL関数ポインタを確認する関数
void MyAboutBox(void) |
{ |
if(HIAboutBox != NULL) |
{ |
HIAboutBox(NULL); |
} |
else |
{ |
// 以前のテクノロジーでバージョン情報ボックスを表示するための大量のコード |
} |
} |
Important: シンボルの有無を確認するときには、コード内で明示的にNULLまたはnilと比較する必要があります。否定演算子(!)を使ってシンボルのアドレスをネゲートすることはできません。
コードをPantherで実行すると、このコードはHIAboutBoxを呼び出して、最低限のデフォルト標準バージョン情報ボックスを表示します。これをJaguarで実行すると、Jaguar向けに書いたコードに基づいてバージョン情報ボックスが表示されます。
このコードを異なる設定でビルドすると、結果は次のようになります。
Mac OS X 10.2.8のSDK設定を選択した場合は:
そのバージョンのシステムではHIAboutBoxは定義されていなのでビルドは失敗します。
Mac OS X 10.3.9のSDK設定で、デプロイメントOSを次のように設定した場合:
10.3: ソフトウェアはPantherでのみ実行し、JaguarおよびPuma(Mac OS Xバージョン10.1)では起動しません。
10.2: ソフトウェアはPantherとJaguarで実行しますが、Pumaでは起動しません。
10.1: ソフトウェアはPantherで実行しますが、Pumaでは弱いリンクがサポートされていないため、Pumaでは起動しません。
注: “「制限事項」”で解説しているように、デプロイメントOSが10.1でPanther向けにビルドされたソフトウェアは、Jaguarでは起動できません。
| < Previous PageNext Page > |
Last updated: 2005-11-09
|
Get information on Apple products.
Visit the Apple Store online or at retail locations. 1-800-MY-APPLE Copyright © 2007 Apple Inc. All rights reserved. | Terms of use | Privacy Notice |