powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Lazarus. Conversion between ordinals and pointers is not portable
12 сообщений из 12, страница 1 из 1
Lazarus. Conversion between ordinals and pointers is not portable
    #39595248
Ghost Writer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lazarus 1.8.0 win32 настойчиво пишет Hint: Conversion between ordinals and pointers is not portable
на такой код:
Код: pascal
1.
PostMessage(FHandle, LM_TASK_..., PtrInt(FNode), 0); 


хотелось бы, чтобы код был рабочий на любой платформе, поэтому интересует в чем может быть подвох ?

нашел тут http://forum.lazarus.freepascal.org/index.php/topic,19380.msg110826.html#msg110826 решение для похожей проблемы
Код: pascal
1.
2.
3.
4.
function PtrToI64(p:pointer):PtrUInt; inline;
begin
  result := {%H-}PtrUInt(p);
end;


В моем случае LPARAM в конечном счете это PtrInt (= Longint).

Всегда использовать в PostMessage PtrInt или в зависимости от разрядности IDE и ОС менять PtrInt / PtrUInt ?
И вообще, нет ли граблей, если компилятор так пугает ?
...
Рейтинг: 0 / 0
Lazarus. Conversion between ordinals and pointers is not portable
    #39595278
Любезный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторпоэтому интересует в чем может быть подвох ?
В разных зайцах указателей на платформах разной разрядности. Соответственно, если, к примеру, Integer на всех платформах имеет размер в 4 байта, преобразование его в указатель при компиляции под 32хразрядную платформу проблем не создаст, а на 64 битах значение старшего байта не всегда будет возможно предсказать.
...
Рейтинг: 0 / 0
Lazarus. Conversion between ordinals and pointers is not portable
    #39595287
Ghost Writer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Любезныйпри компиляции под 32хразрядную платформу проблем не создаст, а на 64 битах значение старшего байта не всегда будет возможно предсказатьзначит, если приложение 32 бита, то проблем не будет. Даже если ОС 64 бит. Я правильно понял?
...
Рейтинг: 0 / 0
Lazarus. Conversion between ordinals and pointers is not portable
    #39595288
kep-ko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ghost Writer, а в какую такую любую платформу ты с этим PostMessage(FHandle, ... собрался?

Не нравится хинт - забодай:
Код: pascal
1.
function PostMessageX(hWnd:HWND; Msg:UINT; pParam:Pointer; lParam:LPARAM):WINBOOL; external 'user32' name {$ifdef UNICODE} 'PostMessageW' {$else not UNICODE} 'PostMessageA' {$endif UNICODE};
...
Рейтинг: 0 / 0
Lazarus. Conversion between ordinals and pointers is not portable
    #39595293
Ghost Writer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kep-koа в какую такую любую платформу ты с этим PostMessageвсё, что может лазарус.

kep-koНе нравится хинт - забодайдостаточно {%H-}. Но вопрос не в этом
...
Рейтинг: 0 / 0
Lazarus. Conversion between ordinals and pointers is not portable
    #39595366
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Lazarus. Conversion between ordinals and pointers is not portable
    #39595433
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ghost Writer,

а так?
Код: pascal
1.
PostMessage(FHandle, LM_TASK_..., 0, NativeUInt(FNode));
...
Рейтинг: 0 / 0
Lazarus. Conversion between ordinals and pointers is not portable
    #39595448
Freedoom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ghost WriterLazarus 1.8.0 win32 настойчиво пишет Hint: Conversion between ordinals and pointers is not portable
на такой код:
Код: pascal
1.
PostMessage(FHandle, LM_TASK_..., PtrInt(FNode), 0); 


хотелось бы, чтобы код был рабочий на любой платформе, поэтому интересует в чем может быть подвох ?

Хотелось бы увидеть описание FNode. А так мой "хрустальный шар" подсказывает, что FNode - pointer или Cardinal. Оба типа беззнаковые, а LPARAM - знаковый
...
Рейтинг: 0 / 0
Lazarus. Conversion between ordinals and pointers is not portable
    #39595453
Ghost Writer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дока так?NativeUInt = PtrUInt;
...
Рейтинг: 0 / 0
Lazarus. Conversion between ordinals and pointers is not portable
    #39595456
Ghost Writer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FreedoomХотелось бы увидеть описание FNodePVirtualNode или Pointer
...
Рейтинг: 0 / 0
Lazarus. Conversion between ordinals and pointers is not portable
    #39595460
Ghost Writer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanВообще вместо http://lazarus-ccr.sourceforge.net/docs/rtl/system/ptrint.html рекомендуется использовать http://lazarus-ccr.sourceforge.net/docs/rtl/system/ptruint.html понял, спасибо.
...
Рейтинг: 0 / 0
Lazarus. Conversion between ordinals and pointers is not portable
    #39595468
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ghost WriterДока так?NativeUInt = PtrUInt;
тогда так
Код: pascal
1.
PostMessage(FHandle, LM_TASK_..., 0, LPARAM(FNode))



По большому счету разницы между PtrUInt и PtrInt нет. Если интересно, тут обсуждалось
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Lazarus. Conversion between ordinals and pointers is not portable
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]