捕获异常
Private Sub Form_Load()
cc = SetUnhandledExceptionFilter(AddressOf UnhandledExceptionFilter)
Dim err As Long
err = GetLastError
Debug.Print err
Dim a As Long
a = 2 ^ 32 '这个地方是溢出 为什么捕获不到
End Sub
Public Function UnhandledExceptionFilter(ByVal lpExceptionInfo As Long) As Long
Debug.Print "进入"
UnhandledExceptionFilter = EXCEPTION_EXECUTE_HANDLER
End Function
[解决办法]
接LS回复,vb编译器自己安装了SEH,在loc_401095+1就是错误处理程序,这里的程序为:
004010B6 - FF25 48104000 jmp dword ptr [<&MSVBVM60.__vbaExceptHandler>>; MSVBVM60.__vbaExceptHandler
修改这里jmp ds:__vbaExceptHandler为自己的错误处理程序地址,可以跳到自己的处理程序.
如果程序中没有on error goto...这样的错误处理,vb编辑器用的都是__vbaExceptHandler来处理.
所有LZ实际每一必要用API来实现自己的错误处理,用on error就能够替代API了.
如果要做其他用途,好像一很难把自己的代码添加进去,没有on error的任何vb过程,一进入过程编译器就添加了错误处理为__vbaExceptHandler,在过程结束的地方编译器添加了取消错误处理的代码.这样在一个过程中不能调用新的过程(会又添加一次错误处理__vbaExceptHandler),而且自己也不能像汇编那样自己方位FS:[0]那些数据...