Начиная с 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};
Но это будет утомительно, поскольку существует множествообъявление в исходных файлах.
Есть ли более эффективные способы заставить исходные файлы работать в Delphi 2007-XE2 win32 и XE2 win64 platform?