Apple Developer Connection
Advanced Search
Member Login 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向けに書いたコードに基づいてバージョン情報ボックスが表示されます。

このコードを異なる設定でビルドすると、結果は次のようになります。



< Previous PageNext Page >


Last updated: 2005-11-09




Did this document help you?
Yes: Tell us what works for you.

It’s good, but: Report typos, inaccuracies, and so forth.

It wasn’t helpful: Tell us what would have helped.
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