Как также подготовиться к 64-разрядной версии при переходе на Delphi 2010 и Unicode

Это сработало для меня:

DateTimeOffset.FromUnixTimeMilliseconds(milliseconds);

Вы можете получить от него только DateTime, если вам это нужно.

13
задан user190142 14 October 2009 в 20:10
поделиться

3 ответа

Используйте NativeInt для целых чисел, которые могут содержать приведенные указатели.

2
ответ дан 1 December 2019 в 19:31
поделиться

Переход на 64-битную версию не должен быть очень болезненным. Начните с намерения указать размер целого числа там, где это имеет значение. Не используйте «целое число», вместо этого используйте Int32 для целых чисел размером 32 бита и Int64 для целых чисел размером в 64 бита. В последнем преобразовании битов определение Integer перешло с Int16 на Int32, так что вы не рискуете, указав точную битовую глубину.

Если у вас есть встроенная сборка, создайте паскаль-эквивалент и несколько модульных тестов, чтобы убедиться, что они работают одинаково. Выполните некоторые временные тесты обоих и посмотрите, работает ли сборка достаточно быстро, чтобы сохранить. Если это так, то вы захотите внести изменения в оба по мере необходимости.

6
ответ дан 1 December 2019 в 19:31
поделиться

Во-первых, посмотрите на места, где вы взаимодействуете с библиотеками, не относящимися к 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-разрядной версией.

7
ответ дан 1 December 2019 в 19:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: