2011-05-04 69 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位模式下是纯虚拟的。

相关问题