Conversion warning.

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Conversion warning.

Сообщение Max Rusov » 11.04.2011 11:02:33

Почему в случае приведения указателя к Cardinal/Integer выдается Hint или Warning:
Conversion between ordinals and pointers is not portable


а в случае приведения объекта - нет?

Код: Выделить всё
{$AppType Console}
{$Mode Delphi}

program CastTest;


procedure Test;
var
  P :Pointer;
  O :TObject;
begin
  P := nil;
  O := nil;
  writeln(Cardinal(P));
  writeln(Cardinal(O));
end;


begin
  Test;
end.


Код: Выделить всё
>ppcrossx64 CastTest.dpr
Free Pascal Compiler version 2.4.0rc1 [2009/12/09] for x86_64
Copyright (c) 1993-2009 by Florian Klaempfl
Target OS: Win64 for x64
Compiling CastTest.dpr
CastTest.dpr(14,11) Warning: Conversion between ordinals and pointers is not portable
Linking CastTest.exe
21 lines compiled, 0.0 sec , 33408 bytes code, 1760 bytes data
1 warning(s) issued
Max Rusov
постоялец
 
Сообщения: 191
Зарегистрирован: 25.04.2009 15:46:03

Re: Conversion warning.

Сообщение Mr.Smart » 11.04.2011 11:15:52

Потому что у 64 битного процессора Pointer=64bit, а Cardinal=32bit. Используйте для преобразования не Cardinal, а PtrUInt.
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Conversion warning.

Сообщение Max Rusov » 11.04.2011 11:19:12

Mr.Smart
Еще раз вопрос прочитайте :)

Сформулирую иначе:

Почему в случае приведения объекта к Cardinal/Integer не выдается Hint или Warning: Conversion between ordinals and pointers is not portable :?:
Max Rusov
постоялец
 
Сообщения: 191
Зарегистрирован: 25.04.2009 15:46:03


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8

Рейтинг@Mail.ru