Это сработало для меня:
DateTimeOffset.FromUnixTimeMilliseconds(milliseconds);
Вы можете получить от него только DateTime, если вам это нужно.
Используйте NativeInt для целых чисел, которые могут содержать приведенные указатели.
Переход на 64-битную версию не должен быть очень болезненным. Начните с намерения указать размер целого числа там, где это имеет значение. Не используйте «целое число», вместо этого используйте Int32 для целых чисел размером 32 бита и Int64 для целых чисел размером в 64 бита. В последнем преобразовании битов определение Integer перешло с Int16 на Int32, так что вы не рискуете, указав точную битовую глубину.
Если у вас есть встроенная сборка, создайте паскаль-эквивалент и несколько модульных тестов, чтобы убедиться, что они работают одинаково. Выполните некоторые временные тесты обоих и посмотрите, работает ли сборка достаточно быстро, чтобы сохранить. Если это так, то вы захотите внести изменения в оба по мере необходимости.
Во-первых, посмотрите на места, где вы взаимодействуете с библиотеками, не относящимися к delphi, и вызовами API, они могут отличаться. В Win32 библиотеки с конвенцией вызова stdcall называются как _SomeFunction @ 4(@ 4 указывает размер параметров и т. Д.). В Win64 есть только одно соглашение о вызовах, и функции в dll больше не декорируются. Если вы импортируете функции из файлов DLL, вам может потребоваться их настроить.
Имейте в виду, что в 64-битном exe вы не можете загрузить 32-битную DLL, поэтому, если вы зависите от сторонних файлов DLL, вам следует проверить также для 64-битной версии этих файлов.
Также обратите внимание на целые числа, если вы зависите от их максимального значения, например, когда вы позволяете им переполняться и ждете момента, когда это произойдет, это вызовет проблемы, если размер целого числа изменится.
Кроме того, при работе с потоками, и вы хотите сериализовать разные данные, включая целое число, это вызовет проблемы, так как размер целого числа изменился, и ваш поток не будет синхронизирован.
Итак, в местах, где вы зависите от размера целого числа или указателя, вам нужно будет внести изменения. При сериализации sush-данных вы также должны помнить об этой проблеме размера, так как это может вызвать несовместимость данных между 32- и 64-битными версиями.
Кроме того, компилятор FreePascal с Lazarus IDE уже поддерживает 64-разрядные версии. Этот альтернативный компилятор Object Pascal не на 100% совместим с диалектом Borland / Codegear / Embarcadero языка Pascal, поэтому его перекомпиляция для 64-разрядной версии может оказаться не такой простой задачей, но она может помочь выявить проблемы с 64-разрядной версией.