Поскольку 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?