使用osx 10.11 sdk构建时,64位模式的CopyCStringToPascal()替代方案

时间:2017-01-24 12:02:34

标签: objective-c c xcode macos upgrade

问题: 我需要将我的项目从OSX10.5 -32位升级到OSX 10.11 - 64位。在升级时,我遇到了许多错误(C99中函数“”的隐式解密“在OS X 10.11 SDK for 64位模式中已被弃用)。这些功能中很少有:

CopyCStringToPascal()
CopyPascalStringToPascal()
FSOpenResFile()
FSMakeFSSpec()
GetDateTime()
SecondsToDate()
BlockMove()

......和类似的功能。

这些功能来自OS SDK,最新的SDK已经发布

#if !__LP64__ 
..
.
..
#endif

在头文件中保护他们的声明。

一种方法是编写在64位模式下调用新函数的包装器,在32位模式下调用旧函数。 我想知道是否还有另一种简短(容易)的方式从这里开始。

感谢。

1 个答案:

答案 0 :(得分:0)

回答基本问题:其中一些功能支持64位支持。

  • 字符串:使用CFStringNSString
  • GetDateTime():查看CFAbsoluteTimeGetCurrent()NSDate
  • SecondsToDate():查看CFCalendarNSCalendar
  • BlockMove():使用memmove()

但是,任何使用旧API的Mac应用程序都可以追溯到经典的Mac OS时代,并且还使用不会直接替换为64位可用API的API。例如,FSSpec数据类型和使用它的所有函数都消失了。 QuickDraw,ATSUI,Open Transport,HIToolbox,外观管理器以及所有与GUI相关的API都不见了。

要使用这些API在Mac上运行64位,需要进行大量重写。作为第一步,您可以针对32位的10.11 SDK编译您的应用程序吗?是否真的需要才能成为64位,至少现在呢?