Переобъявление???

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Zer
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 460
Зарегистрирован: 26.09.2003 (Пт) 13:08
Откуда: Нижний Новгород

Переобъявление???

Сообщение Zer » 22.01.2005 (Сб) 18:28

Вот строка:
Код: Выделить всё
            Params.VspomParam.Ugol(CommandNow(3) And 3) = (Asc(Mid$(CommandOut, 4, 1)) * 256) + Asc(Mid$(CommandOut, 3, 1))

Тип Params.VspomParam.Ugol(CommandNow(3) And 3) объявлен заранее как Long. При Asc(Mid$(CommandOut, 4, 1))=255 вылетает с Overflow :shock: Что за ерунда?? Он что-ли Params.VspomParam.Ugol(CommandNow(3) And 3) переопределяет в Byte???
Microsoft DirectX - Маломягкий Прямой Х...
Не откладывай на завтра то, что можно выпить сегодня...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 22.01.2005 (Сб) 18:58

Попробуй так:
Код: Выделить всё
Params.VspomParam.Ugol(CommandNow(3) And 3) = (CLng(Asc(Mid$(CommandOut, 4, 1))) * 256) + Asc(Mid$(CommandOut, 3, 1))
Изображение

Zer
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 460
Зарегистрирован: 26.09.2003 (Пт) 13:08
Откуда: Нижний Новгород

Сообщение Zer » 22.01.2005 (Сб) 19:52

Да это-то понятно... Таким-же макаром можно (asc(...)*65536)/256... В обоих случаях результат Long. А как сделать, чтобы без этого, а просто помещал енто значение куда надо...??? А то придется половину программы переделывать... :cry:
Microsoft DirectX - Маломягкий Прямой Х...
Не откладывай на завтра то, что можно выпить сегодня...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 22.01.2005 (Сб) 20:09

Ты не понял, в чём дело... Функция Asc возвращает Integer, ты его умножаешь на 256 -> происходит переполнение. Тип того, куда это кладётся, тут не при чём.

Если хочешь, замени во всём проекте 256 на 256& - тоже должно помочь.
Изображение

Zer
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 460
Зарегистрирован: 26.09.2003 (Пт) 13:08
Откуда: Нижний Новгород

Сообщение Zer » 23.01.2005 (Вс) 0:05

Ок. Спасибо. Это пожалуй попроще...
Microsoft DirectX - Маломягкий Прямой Х...
Не откладывай на завтра то, что можно выпить сегодня...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 24.01.2005 (Пн) 11:13

Пиши не 256, а 256& и будет тебе щастье.
Lasciate ogni speranza, voi ch'entrate.

Zer
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 460
Зарегистрирован: 26.09.2003 (Пт) 13:08
Откуда: Нижний Новгород

Сообщение Zer » 24.01.2005 (Пн) 23:41

Во имя овса и сена и свинного уха. Аврал!
Но уж всегда писать 256& - это уж слишком...
Microsoft DirectX - Маломягкий Прямой Х...
Не откладывай на завтра то, что можно выпить сегодня...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 25.01.2005 (Вт) 8:39

Почему же?
Мне не лень, немного дополнительных движений, зато подобных глюков больше не бывает.
Lasciate ogni speranza, voi ch'entrate.

Zer
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 460
Зарегистрирован: 26.09.2003 (Пт) 13:08
Откуда: Нижний Новгород

Сообщение Zer » 25.01.2005 (Вт) 23:44

Но ведь в первом случае проводятся операции с integer а во втором с long. На скорость повлияет... Хотя ето-ж x32. Может и пофиг... Но на 16-ти разрядном разница приличная...
Microsoft DirectX - Маломягкий Прямой Х...
Не откладывай на завтра то, что можно выпить сегодня...


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

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

Сейчас этот форум просматривают: Yandex-бот и гости: 15

    TopList