Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: If .. Then Добавлено: 09.05.10 03:07  

Автор вопроса:  Winand | Web-сайт: winandfx.narod.ru
Вариант1:
            Dim bbol As Boolean
            bbol = taglib.SaveFile(itemIDs(i))
            Debug.Print bbol
            If bbol Then Debug.Print "Бред1"
            If Not bbol Then Debug.Print "Бред2"
            If (True) And (Not bbol) Then Debug.Print "Бред3"
            If (bbol) And (True) Then Debug.Print "Бред4"
            If (bbol) And (Not bbol) Then Debug.Print "Бред5"
True
Бред1
Бред2
Бред3
Бред4

Вариант2:
            Dim bbol As Boolean
            bbol = True 'taglib.SaveFile(itemIDs(i))
            Debug.Print bbol
            If bbol Then Debug.Print "Бред1"
            If Not bbol Then Debug.Print "Бред2"
            If (True) And (Not bbol) Then Debug.Print "Бред3"
            If (bbol) And (True) Then Debug.Print "Бред4"
            If (bbol) And (Not bbol) Then Debug.Print "Бред5"
True
Бред1
Бред4

Может быть я просто с ума сошел? В обоих случаях bbol=true, но проверка результата различно проходится.
            Dim bbol As Boolean
            bbol = taglib.SaveFile(itemIDs(i))
            Debug.Print bbol
            If bbol Then Debug.Print "Бред1"
            If bbol = True Then Debug.Print "Бред2"
            If bbol = False Then Debug.Print "Бред3"
True
Бред1
Это как вообще)

Ответить

  Ответы Всего ответов: 19  

Номер ответа: 1
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #1
Добавлено: 09.05.10 03:21
taglib_file_save был задекларирован as boolean, замена на as long всё починила. Попробуй блин догадайся. Лучше бы оно падало, тогда проще найти ошибку)
  1. Private Declare Function taglib_file_save Lib "tag.dll" Alias "_taglib_file_save@4" (ByVal file As Long) As Long


  1. Public Function SaveFile(ByVal Index As Long) As Boolean
  2.     SaveFile = taglib_file_save(files(CStr(Index))(Handle))
  3. End Function

Ответить

Номер ответа: 2
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #2 Добавлено: 09.05.10 21:56
Грустно без жесткой проверк типов? :)

Ответить

Номер ответа: 3
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #3
Добавлено: 10.05.10 01:21
Чего-чего, а такого поведения булевой переменной я не ожидал)

Ответить

Номер ответа: 4
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #4
Добавлено: 10.05.10 11:19
Нормальное поведение. Ноль = Ложь, НеНоль = Истина.

Ответить

Номер ответа: 5
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #5
Добавлено: 10.05.10 16:01
  1. If bbol Then Debug.Print "Бред1"
  2. If Not bbol Then Debug.Print "Бред2"

Оба условия срабатывают. Видимо в данном случае переменная на самом деле не булева, ведь в коде
  1. Dim q As Long
  2. q = 1
  3. If q Then MsgBox 1
  4. If Not q Then MsgBox 2
также сработают оба условия

Ответить

Номер ответа: 6
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #6 Добавлено: 11.05.10 09:07
также сработают оба условия

А это все потому что нет жесткой типизации.. и этот сраный бэйсик сам приводит хрен знает к какому типу.. и в результате имеешь то, что имеешь.. Для тебя это должно послужить сигналом бросать этот аццтойный йазыг :)

Ответить

Номер ответа: 7
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #7 Добавлено: 11.05.10 12:25
В нормальном поведении булевая переменная должна принимать одно из 2 значений:
True=-1
False=0

Но видимо в "булевую" переменную каким-то образом попадает число, отличное от 0 и -1. Отсюда и проблемы, в принципе невозможные на языке с жесткой проверкой типов

Ответить

Номер ответа: 8
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #8
Добавлено: 11.05.10 14:33
Не каким-то образом, а конкретно библиотечная функция возвращает int. И бейсик в этом случае видимо ничего не конвертирует.
Конечно язык аццтойный, но интерфейс легко делать) Правда теперь уже сложно, когда приходится хучить окно, чтобы оно приклеивалось к краям и чтобы ограничивать ресайз.

Ответить

Номер ответа: 9
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #9
Добавлено: 11.05.10 18:14
o_O
  1.  
  2. Public Function SaveFile(ByVal Index As Long) As Boolean
  3.     SaveFile = IIf(taglib_file_save(files(CStr(Index))(Handle)) = 1, True, False)
  4. End Function

Ответить

Номер ответа: 10
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #10
Добавлено: 11.05.10 20:04
VBD, надо было просто в объявлении taglib_file_save сменить булев на long, а в SaveFile бейсик уже сам соображает, как конвертировать в булеан.
Ну а в итоге получается более-менее нормальный редактор тегов http://imagebin.org/index.php?mode=image&id=96442

Ответить

Номер ответа: 11
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #11 Добавлено: 12.05.10 13:35
Снова криворукость программеров пытаются записать в минусы компилятору. С какого перепоя в булевую переменную заносятся значения, отличные от 0 и -1? Стрингу случаем запихнуть не пробовали?
0FFFFH - (-1) - True
Побитное "НЕ"
Not 0FFFFH - (0) - False
И только.
0FFFEH - (-2) - не False, значит True
Not 0FFFEH - (1) - никак не False.
Никакие проверки типов тут ни при чем. Если человек объявил Retval функции как VARIANT_BOOL, а возвращает черт знает что - это сугубо его проблемы.

Ответить

Номер ответа: 12
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #12 Добавлено: 12.05.10 14:19
Пришел, облаял всех и щас снова на пол года пропадет ))))

Ответить

Номер ответа: 13
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #13 Добавлено: 12.05.10 14:39
Да на полгода маловато будет. Сюда как не заглянешь - все одно и то же. Клепают ширинки на болтах и жалутся что штаны все время мокрые. Уныло...

Ответить

Номер ответа: 14
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #14
Добавлено: 12.05.10 22:27
Мне странно, что бейсик не проверяет правильность значения. Так-то всё понятно. Библиотека возвращает 1, (Not 1) != 0, потому и bbol и not bbol срабатывали. И это всё минусы компилятора, LamerOnLine самый неправый человек в мире

Ответить

Номер ответа: 15
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #15 Добавлено: 13.05.10 14:15
Winand, а мне странно что вы слышал эти термины но не знаешь что они значат.
VBшный boolean по своей сути ole'шный тип VARIANT_BOOL. Его значения - VARIANT_TRUE и VARIANT_FALSE. Ламеры могут чудить как им влезет - но если не знать язык хотя бы на базовом уровне - подобные клоунады неизбежны.
Если библиотека возвращает 1 при retval параметре VARIANT_BOOL - аффтару пора выдернуть руки из задницы. А Not 1 никогда не будет нулем, это должен понимать даже Winand.

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам