Есть одна возможная ловушка при использовании любого метода (w / или wo / variable). Вы должны быть уверены, что функция возвращает фактический булев VB (OLE VARIANTBOOL), а не C bool или любой другой тип. Если функция написана и представлена в all-VB6, это не проблема, но ...
Нередки случаи, когда создаются декларации для внешних (обычно API) функций, которые прототипируются как возвращающие bool, используя As Boolean
для возвращаемого типа. VB принимает это, но когда возвращается 'True' (из POV функции), он может находиться в аномальном состоянии: 16-разрядный логический элемент VB, который содержит значение 1 вместо нормального -1.
Это может иметь странные последующие эффекты, наиболее очевидным из которых является тест для If Not MyFunction()
, который вычислит (Not 1)
или -2 вместо (Not -1)
или 0, как и ожидалось. Таким образом, вы получите странный результат Not(True) = True
Рекомендуется Declare
внешние функции 'bool' As Long
и CBool()
результат.