CallAssert vntiExpression, 7, sMsg
End Sub
Private Sub CallAssert{ByVal vntiExpression As Variant, _
ByVal iOpt As Long,
_ sMsg As String)
If (vntiExpression) Then
Exit Sub Else
' Следующий флажок используется, чтобы определить, вызывалась ли
' уже функция InDesign. Вызывать эту функцию повторно нет
' необходимости.
Static bCheckedDesign As Boolean 'False по умолчанию.
' Флажок, разрешающий остановки, я пересылаю в DiagAssertVB.
' Если этот флажок установлен в 1, то DiagAssertVB разрешит
' останавливать приложение. Если этот флажок установлен в 0,
' приложение выполняется в VB IDE так, что DiagAssertVB не будет
' разрешать остановки. Если пользователь запускается
' внутри VB IDE, то прерывание довольно опасно и может погубить
' весь ваш дневной труд!
Static lAllowHalts As Long
' Вызвать InDesign только раз.
If (False = bCheckedDesign) Then
If (True = InDesign()) Then
lAllowHalts = 0
Else
lAllowHalts = I
End If
bCheckedDesign = True
End If
Dim IRet As Long
IRet = DiagAssertVB(iOpt, lAllowHalts, sMsg)
If (I = IRet) Then
' Пользователь .хочет прервать выполнение. Однако
' прерывание не разрешается, если выполнение
' происходит внутри VB IDE.
If (1 = lAllowHalts) Then
DebugBreak
End If
End If
End If
End Sub
'''''''''''''''''''''''''''''''''''''''''
' Эта замечательная функция взята из превосходной главы Пита Морриса "On
' Error GoTo To Hell" (с.25,26 в "Advanced Microsoft Visual Basic 6.0")
' InDesign позволяет проверять, выполняетесь ли вы в VB IDE. Я благодарен
' Питу, разрешившему мне использовать эту функцию!
'''''''''''''''''''''''''''''''''''''''
Public Function InDesign() As Boolean
' Я оставлю только один комментарий Пита — он превосходен.
' Только для этого и нужен Debug.Assert!
Static nCallCount As Integer
Static bRet As Boolean ' По умолчанию этот флажок False.
nCallCount = nCallCount + 1
Select Case nCallCount
Case 1: ' Первый вход (выполнение Debug.Assert)
Debug.Assert InDesign() Case 2: ' Второй вход, когда Debug.Assert уже выполнен
bRet = True
End Select
' Если был вызван Debug.Assert, возвратить True,
' чтобы предотвратить ловушку.
InDesign = bRet
' Переустановить счетчик для будущих вызовов.
nCallCount = 0
End Function