4

2003 年頃のI/O Kitコードを更新しようとしていますが、何か奇妙なことに実行してい__LP64__ます。プリプロセッサ マクロが設定されている場合にのみ、メソッドが純粋仮想として宣言されている場所がいくつかあります。IOBlockStorageDeviceからの例:

public
#ifdef __LP64__
    virtual IOReturn    getWriteCacheState(bool *enabled)   = 0;
#else /* !__LP64__ */
    virtual IOReturn    getWriteCacheState(bool *enabled); /* 10.3.0 */
#endif /* !__LP64__ */

上記の例で、10.3 ではなく >=10.4 で getWriteCacheStatus の実装を強制するのはなぜですか? これは「以前にこれを行うべきだった」という単なるケースですか、それとも私が見ていないより深い何かがあるのですか (通常はそうです)。

4

1 に答える 1

3

私の推測では、32 ビット バージョンには、メソッドが導入される前に作成されたドライバーにフォールバックするための既定の実装が含まれていると思います。そのメソッドを含まない 64 ビット版の OSX は存在しなかったため、フォールバックを提供する必要はありません。非推奨のメソッドに取って代わる新しいメソッドについて、IOKit の他の部分で同様のパターンを見てきました。非推奨のメソッドは 32 ビット モードでのみ存在し、デフォルトで新しいメソッドを呼び出します。新しい方法は、64 ビット モードでの純粋な仮想です。

于 2011-05-05T17:11:22.747 に答える