Ошибками пользуются в любой нормально написанной программе,
вне зависимости от объема ее кода.
Это помогает проанализировать, правильно ли работает программа.
И если нет, минимальными усилиями узнать причину проблемы.
Для этого в идеале, в каждой из функций следует использовать обработчик ошибок (On Error Goto).
А там, где используются API-функции, каждую из них проверять на предмет возвращаемого значения, а также кода ошибки API-функции (Err.LastDllError).
Это позволит минимизировать затраты на отладку программы
и еще на этапе проектирования исключить некоторые наиболее вероятные ошибки в вызове функций.
Внутреннюю ошибку VB можно также симмитировать вручную с помощью вызова процедуры Err.Raise [Номер ошибки]
Это спровоцирует переход к метке обработчика ошибок, указанной в директиве On Error Goto Имя_Метки
Это иногда полезно, если Вы хотите ввести в программу собственные ошибки (выход из функции при возникновении, на Ваш взгляд, критической ситуации).
Номер внутренней ошибки также можно очистить методом Err.Clear
Обработчик ошибок в любой момент можно отключить, вернув стандартное поведение программы, с помощью директивы On Error Goto 0
В этом случае, если произойдет ошибка, программа прекратит свое выполнение и выведет ошибку и краткое описание в стандартном диалоговом окне (msgbox)*
* Кроме случаев, когда обработчик ошибок установлен в родительской функции (вниз по стеку вызовов), т.е. функции, которая вызвала эту функцию. В этом случае будет вызван именно её обработчик, а программа продолжит свое выполнение.
При возникновении внутренней ошибки, ее номер и описание можно получить через свойства Number и Description объекта Err.
Стандартный обработчик ошибок VB имеет такой вид:
Код (vb.net):
Function foo()
On Error Goto ErrorHandler
' ... тело функции
if {что-то можем проверить} then
' здесь, если нам нужно, можем вызвать ошибку самостоятельно
err.Raise 51 'Internal error
end if
Exit function
ErrorHandler:
'обработчик
'выводим номер внутренней ошибки, краткое описание, номер ошибки API-функции
Debug.? "Error: " & Err.Number & ". " & Err.Description & ". LastDllErr: " & Err.LastDllError
End function
Описание ошибки API-функции (или COM-объекта) можем получить с помощью такой функции:
Код (vb.net):
Private Declare Function FormatMessage Lib "kernel32.dll" Alias "FormatMessageA" (ByVal dwFlags As Long, lpSource As Long, ByVal dwMessageId As Long, ByVal dwLanguageId As Long, ByVal lpBuffer As String, ByVal nSize As Long, Arguments As Any) As Long
Const MAX_PATH As Long = 260&
Public Function MessageText(lCode As Long) As String
On Error goto ErrorHandler
Const FORMAT_MESSAGE_FROM_SYSTEM As Long = &H1000&
Const FORMAT_MESSAGE_IGNORE_INSERTS As Long = &H200
Dim sRtrnCode As String
Dim lRet As Long
sRtrnCode = Space$(MAX_PATH)
lRet = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM Or FORMAT_MESSAGE_IGNORE_INSERTS, ByVal 0&, lCode, ByVal 0&, sRtrnCode, MAX_PATH, ByVal 0&)
If lRet > 0 Then
MessageText = Left$(sRtrnCode, lRet)
MessageText = Replace$(MessageText, vbCrLf, vbNullString)
End If
Exit function
ErrorHandler:
Debug.? "Error: " & Err.Number & ". " & Err.Description & ". LastDllErr: " & Err.LastDllError
End Function
Список внутренних ошибок VB6:
Отфильтровать:
Код |
Описание |
3 |
Return without GoSub |
5 |
Invalid procedure call or argument |
6 |
Overflow |
7 |
Out of memory |
9 |
Subscript out of range |
10 |
This array is fixed or temporarily locked |
11 |
Division by zero |
13 |
Type mismatch |
14 |
Out of string space |
16 |
Expression too complex |
17 |
Can't perform requested operation |
18 |
User interrupt occurred |
20 |
Resume without error |
28 |
Out of stack space |
35 |
Sub or Function not defined |
47 |
Too many DLL application clients |
48 |
Error in loading DLL |
49 |
Bad DLL calling convention |
51 |
Internal error |
52 |
Bad file name or number |
53 |
File not found |
54 |
Bad file mode |
55 |
File already open |
57 |
Device I/O error |
58 |
File already exists |
59 |
Bad record length |
61 |
Disk full |
62 |
Input past end of file |
63 |
Bad record number |
67 |
Too many files |
68 |
Device unavailable |
70 |
Permission denied |
71 |
Disk not ready |
74 |
Can't rename with different drive |
75 |
Path/File access error |
76 |
Path not found |
91 |
Object variable or With block variable not set |
92 |
For loop not initialized |
93 |
Invalid pattern string |
94 |
Invalid use of Null |
96 |
Unable to sink events of object because the object is already firing events to the maximum number of event receivers that it supports |
97 |
Can not call friend function on object which is not an instance of defining class |
98 |
A property or method call cannot include a reference to a private object, either as an argument or as a return value |
321 |
Invalid file format |
322 |
Can't create necessary temporary file |
325 |
Invalid format in resource file |
380 |
Invalid property value |
381 |
Invalid property array index |
382 |
Set not supported at runtime |
383 |
Set not supported (read-only property) |
385 |
Need property array index |
387 |
Set not permitted |
393 |
Get not supported at runtime |
394 |
Get not supported (write-only property) |
422 |
Property not found |
423 |
Property or method not found |
424 |
Object required |
429 |
ActiveX component can't create object |
430 |
Class does not support Automation or does not support expected interface |
432 |
File name or class name not found during Automation operation |
438 |
Object doesn't support this property or method |
440 |
Automation error |
442 |
Connection to type library or object library for remote process has been lost. Press OK for dialog to remove reference. |
443 |
Automation object does not have a default value |
445 |
Object doesn't support this action |
446 |
Object doesn't support named arguments |
447 |
Object doesn't support current locale setting |
448 |
Named argument not found |
449 |
Argument not optional |
450 |
Wrong number of arguments or invalid property assignment |
451 |
Property let procedure not defined and property get procedure did not return an object |
452 |
Invalid ordinal |
453 |
Specified DLL function not found |
454 |
Code resource not found |
455 |
Code resource lock error |
457 |
This key is already associated with an element of this collection |
458 |
Variable uses an Automation type not supported in Visual Basic |
459 |
Object or class does not support the set of events |
460 |
Invalid clipboard format |
461 |
Method or data member not found |
462 |
The remote server machine does not exist or is unavailable |
463 |
Class not registered on local machine |
481 |
Invalid picture |
482 |
Printer error |
735 |
Can't save file to TEMP |
744 |
Search text not found |
746 |
Replacements too long |
Showing 1 to 87 of 87 entries
Последнее редактирование: 26 авг 2015