2017-01-24 11 views
0

Проблема: Мне нужно обновить мой проект с OSX10.5 -32 бит до OSX 10.11 - 64 бит. Во время обновления я получил ошибки (неявное декалирование функции «» недействительно на C99) для многих функций, которые устарели в OS X 10.11 SDK для 64-битного режима. Немногие из этих функций:Альтернатива CopyCStringToPascal() для 64-битного режима при построении с использованием osx 10.11 sdk

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

... и подобные функции.

Эти функции приходят из OS SDK и последние SDK поставили

#if !__LP64__ 
.. 
. 
.. 
#endif 

охранников вокруг своих заявлений в их заголовочном файле.

Один из способов - написать оболочку, которая вызывает новые функции в режиме 64 бит и старую функцию в 32-битном режиме. Мне было интересно, есть ли еще один короткий (и легкий) способ перейти отсюда.

Спасибо.

ответ

0

Чтобы ответить на ваш основной вопрос: для некоторых из этих функций предусмотрены 64-разрядные поддерживаемые замены.

  • Строки: Используйте CFString или NSString
  • GetDateTime(): Посмотрите на CFAbsoluteTimeGetCurrent() или NSDate класса
  • SecondsToDate(): Посмотрите на CFCalendar или NSCalendar
  • BlockMove(): Используйте memmove()

Но, любой Использование Mac API этот старый, вероятно, относится к классическим дням Mac OS, а также использует API, которые не будут легко заменяться 64-битными доступными API. Например, тип данных FSSpec и все используемые им функции исчезли. QuickDraw, ATSUI, Open Transport, HIToolbox, Appearance Manager и все интерфейсы, связанные с GUI, исчезли.

Требуется существенная переработка, чтобы получить приложение, использующее эти API, для запуска 64-разрядной версии на Mac. В качестве первого шага вы можете скомпилировать приложение против 10.11 SDK в 32-битном? И действительно ли нужно быть 64-битным, по крайней мере, прямо сейчас?

+0

Благодарим за ответ, Брендан (Это мой первый вопрос о стековом потоке). Да, я могу скомпилировать приложение против 10.11 SDK в 32-битном режиме. и поскольку мы сделали 64-битную версию нашим клиентам, нам нужно это сделать. Я думаю, что Apple не должна полностью удалять старый API для 64 бит. Для соответствия этим новым форматам API потребуется множество изменений. Вздох! –

+0

Да, недостаток 64-битного углерода был большим шоком и болью для компаний с большими приложениями Carbon. Microsoft выпустила 64-битную версию Office для Mac несколько месяцев назад, и потребовалось Adobe years для переноса всех своих приложений на Cocoa/64-bit. –