Почему Shell() возвращает значение типа Double?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Почему Shell() возвращает значение типа Double?

Сообщение Mikle » 17.03.2014 (Пн) 22:29

Subj. Функция Shell() (а это не Sub, а именно Function) возвращает идентификатор процесса, который можно использовать, например, в API OpenProcess(). Но это целое число и в OpenProcess() имеет тип "двойное слово", почему в VB6 функция Shell() возвращает Double, который численно всё равно целый и равен PID?

The trick
Постоялец
Постоялец
 
Сообщения: 781
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Почему Shell() возвращает значение типа Double?

Сообщение The trick » 18.03.2014 (Вт) 0:05

Наверное потому, что PID - DWORD, а DWORD - unsigned integer. Хотя FILD загружает знаковый тип. Это интересно
Вот на всякий случай
Изображение
, как видно по смещению LOCAL4 - хранится структура PROCESS_INFORMATION, соответственно LOCAL2 - ProcessID
UA6527P

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Почему Shell() возвращает значение типа Double?

Сообщение Mikle » 18.03.2014 (Вт) 8:13

Кривоус Анатолий писал(а):PID - DWORD, а DWORD - unsigned integer

Вот именно. Всё равно в API функциях, где нужен PID, мы его объявляем As Long, в случае, когда Shell() вернёт значение >&H79999999 мы получим ошибку, а возвращай Shell() тип Long - ошибки не будет.

The trick
Постоялец
Постоялец
 
Сообщения: 781
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Почему Shell() возвращает значение типа Double?

Сообщение The trick » 18.03.2014 (Вт) 8:59

когда Shell() вернёт значение >&H79999999
Почему &H79999999? Может &H7FFFFFFF? Shell не вернет значение выходящее за диапазон Long, т.к. FILD грузит со знаком. Вобщем для меня это тоже не понятно почему возвращает Double, может Хакер знает
UA6527P

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Почему Shell() возвращает значение типа Double?

Сообщение Mikle » 18.03.2014 (Вт) 10:22

Кривоус Анатолий писал(а):Почему &H79999999? Может &H7FFFFFFF?

Естественно :)
Может просто разработчики протупили: DWORD->Double Word->Double...

The trick
Постоялец
Постоялец
 
Сообщения: 781
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Почему Shell() возвращает значение типа Double?

Сообщение The trick » 18.03.2014 (Вт) 10:49

Может просто разработчики протупили
Возможно, я бы понял этот ход, если бы там стоял FILD QWORD PTR [LOCAL2] с предварительным занулением LOCAL1, тогда бы возвращалось положительное число как и положено DWORD'у. А пригодиться это могло при отображении PID'а стандартными средствами VB
UA6527P


Вернуться в Visual Basic 1–6

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

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

    TopList