Подтвердить что ты не робот

Delphi 2007 и XE2: использование NativeInt

Поскольку Delphi XE2, NativeInt имеет новое значение. В 32-битной среде выполнения NativeInt имеет 32 бита. При времени выполнения 64 бит NativeInt имеет 64 бита.

У меня есть исходные файлы, в которых используется сторонняя DLL (32 и 64 бит). Эти DLL используют 32 и 64 бита целых чисел как на платформе 32, так и на 64 соответственно.

Эти исходные файлы работают в Delphi 2007 - 32-битная платформа Delphi XE2 без проблем:

например:.

function Test: Integer;

Когда я пытаюсь перенести эти исходные файлы на 64-битную платформу Delphi XE2, вышеуказанная функция больше не работает, так как ей требуется целое число 64 бит. Чтобы источник работал на обеих платформах 32/64, я перехожу к

function Test: NativeInt;

И он работает.

Однако объявление не работает в Delphi 2007, так как Delphi 2007 рассматривает NativeInt как целое число 64 бит: SizeOf (NativeInt) = 8

Я могу решить эту проблему, используя условную директиву RtlVersion или CompilerVersion для

function Test: {$if CompilerVersion<=18.5}Integer{$else}NativeInt{$ifend};

Но это было бы утомительно, поскольку в исходных файлах было много объявлений.

Есть ли лучший способ заставить исходные файлы работать в платформе win32 и XE2 win64 на Delphi 2007-XE2?

4b9b3361

Ответ 1

Лучшей альтернативой является повторный набор самого NativeInt:

{$if CompilerVersion<=18.5}
type
  NativeInt = Integer;
{$ifend}

Он должен выполняться один раз на единицу и может быть реализован как часть общего файла *.inc.

Ответ 2

Gee: почему бы просто не использовать LongInt (где вам нужны 32 бита) и Int64 (в противном случае)?

И просто используйте "integer", где это не имеет значения?

Просто кажется интуитивно понятным использовать "NativeInt", где вы ЗНАЕТЕ, что это будет означать разные вещи в разное время...

PS: Вы всегда можете определить свой СОБСТВЕННЫЙ, пользовательский тип и $ifdef!