2011-05-04 32 views
4

我正在嘗試更新一些大約-2003年的I/O Kit代碼,並且我遇到了一些奇怪的事情:只有在設置了__LP64__預處理器宏的情況下,纔有一些地方將方法聲明爲純虛擬。例如,來自IOBlockStorageDeviceOS X:爲什麼__LP64__會導致純虛函數?

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

在上述例子中,爲什麼迫使getWriteCacheStatus的在10.3> = 10.4Hz但不執行?這僅僅是「我們之前應該做到這一點」的情況,還是我沒有看到更深的東西(通常是這種情況)。

回答

3

我的猜測是,32位版本包含一個默認實現,以便在引入方法之前寫入驅動程序。由於沒有包含該方法的64位OSX版本,因此不需要提供回退功能。我在IOKit的其他部分看到了替代廢棄方法的新方法的類似模式。不推薦使用的方法只存在於32位模式下,默認情況下調用新方法。新方法在64位模式下是純虛擬的。

相關問題