XairOn писал(а):так вот, бля обработки ошибок
tyomitch писал(а):Мат на форуме!
d3drm писал(а):я за такие программы сразу всякие интимные места бы отрезал. Это чтож получается, не программа, а одна сплошная ошибка? Нда... Где вас программировать учат...
SetUnhandledExceptionFilter AddressOf Exception
'RaiseException &H10, 50, 1, VarPtr(nArgs(0))
Err.Raise -155
AddVectoredExceptionHandler -1, AddressOf Exception
'...
Public Function Exception(ByVal a As Long) As Long
MsgBox a
ExitProcess a
End Function
'В модуле
Option Explicit
Public Type EXCEPTION_RECORD
ExceptionCode As Long 'Код исключения
ExceptionFlags As Long 'Флаги исключения
pExceptionRecord As Long 'Хрен его знает
ExceptionAddress As Long 'Адрес, по которому произошло исключение
NumberParameters As Long 'Колчиество параметров
pExceptionInformation As Long 'Собственно параметры
End Type
Public Type EXCEPTION_POINTERS
pExceptionRecord As Long
pContextRecord As Long
End Type
Public Declare Sub RaiseException Lib "kernel32" (ByVal dwExceptionCode As Long, ByVal dwExceptionFlags As Long, ByVal nNumberOfArguments As Long, ByVal lpArguments As Long)
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByVal Destination As Long, ByVal Source As Long, ByVal Length As Long)
Public Declare Function AddVectoredExceptionHandler Lib "kernel32" (ByVal aPosition As Long, ByVal aAddress As Long) As Long
Public Declare Sub ExitProcess Lib "kernel32" (ByVal uExitCode As Long)
Public Const EXCEPTION_CONTINUE_EXECUTION = -1
Public Const EXCEPTION_CONTINUE_SEARCH = 0
Public Function Exception(ByRef ptr As EXCEPTION_POINTERS) As Long
Dim nRecord As EXCEPTION_RECORD
CopyMemory VarPtr(nRecord), ptr.pExceptionRecord, Len(nRecord)
MsgBox "Исключение!" & vbCrLf & _
"Код: " & nRecord.ExceptionCode & vbCrLf & _
"Флаги: " & nRecord.ExceptionFlags & vbCrLf & _
"Кол-во параметров:" & nRecord.NumberParameters _
, vbCritical, "Ошибка"
'Dim nErr As ErrObject
'CopyMemory VarPtr(nErr), nRecord.pExceptionInformation + 4, 4
MsgBox Hex(nRecord.pExceptionInformation)
Exception = EXCEPTION_CONTINUE_SEARCH 'Мы можем или завершить процесс, используя ExitProcess или продожить поиск. Мы не можем возобновить выполнение программы
End Function
'В форме
Private Sub Form_Load()
Dim nArgs(0) As String
nArgs(0) = "AAA"
AddVectoredExceptionHandler -1, AddressOf Exception
Err.Raise -155
End
End Sub
Run-time error '453':
Can't find DLL entry point AddVectoredExceptionHandler in kernel32
ANDLL писал(а):А теперь объясните мне, куда указывает nRecord.pExceptionInformation?
MSDN писал(а):ExceptionInformation
Specifies an array of additional 32-bit arguments that describe the exception. The RaiseException function can specify this array of arguments. For most exception codes, the array elements are undefined.
ANDLL писал(а):Ну, скажем так. Если бы у тебя был WinXP, ты увидел бы, что nRecord.pExceptionInformation=&HDEADCAFE. Вот и куда оно указывает?
push ebp
mov ebp,esp
push ecx
push ecx
mov eax,0DEADCAFEh
mov [ebp-8],eax
mov [ebp-4],eax
lea eax,[ebp-8]
push eax
push 2
push 1
push 0C000008Fh
call dword ptr [RaiseException]
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 45