質問

2003年頃のいくつかの更新を試みています I/Oキット コードと私は奇妙なものに実行されています。 __LP64__ プリプロセッサマクロが設定されています。例、から ioblockstoragevice:

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

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

役に立ちましたか?

解決

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top