Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.09.2011, 14:31   #1
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
Вопрос PostMessage и тип Integer параметров WParam/LParam

Всем добрый.
Скажите пожалуйста, является ли этот код опасным?

Код:
var
  LpIniPath:PAnsiString;
begin
  New(LpIniPath);
  //работаем со строкой LpIniPath^
  ...
  PostMessageA(FWorkflow.Handle,WM_CREMOD,Integer(LpIniPath),FIndex);
И в методе другой формы отрабатывает callback-процедура по обработке сообщения WM_CREMOD.
Есть подозрение, что в выделенном фрагменте кроется потенциальная оошибка преобразования типов: Pointer - это указатель, но какого диапазона? Если от 0 до 2 млрд (Integer), тогда код рабочий. Если от 0 до 4 млрд (Cardinal или DWORD), то вероятность успеха сомнительна...
Скажу сразу, что код работатет... или мне просто везет?
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Старый 20.09.2011, 17:20   #2
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Если этот код и опасем, то совсем по иной причине - по невнимательности программиста, могущего допустить при этом утечку памяти.
А в приведении типа в дан.случае никакой опасности нет.
Единственное (не существенное в данном контексте) замечание - корректнее и целесообразнее приведение указателя к типу WPARAM

> Если от 0 до 4 млрд

Выше 2 млрд этот указатель при всем желании не будет указывать.

Последний раз редактировалось mss; 20.09.2011 в 17:23.
mss вне форума Ответить с цитированием
Старый 20.09.2011, 20:05   #3
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

Огромное спасибо! о таких псевдотипах даже и не знал, учту.
Самое главное, что не более 2 млрд, ну вообще как бы логично, ведь процессу достается 2 гб виртуального адресного пространства. Просто было сомнение что 32 бит это 2^32=4 млрд и больше чем Integer. Но оказалось все гуд. Спасибо)
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Старый 20.09.2011, 22:24   #4
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Какой же это псевдотип ?
Самый что ни на есть обычный тип.
mss вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
WPARAM wParam, LPARAM lParam, LPVOID *lpParam mizantrop32 Win Api 2 18.02.2011 12:10
две задачи на тип INTEGER и тип CHAR inspiron13 Помощь студентам 5 04.01.2011 00:17
две задачи на тип INTEGER и тип CHAR inspiron13 Паскаль, Turbo Pascal, PascalABC.NET 3 04.01.2011 00:08
WPARAM wParam, LPARAM lParam откуда берётся? Garic_ Общие вопросы C/C++ 4 09.06.2010 22:42
можно тип переменной word преобразовать в integer мандарин Общие вопросы Delphi 7 01.06.2007 20:04