首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

捕获错误

2013-01-23 
捕获异常Private Sub Form_Load()cc SetUnhandledExceptionFilter(AddressOf UnhandledExceptionFilter)

捕获异常
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]那些数据...

热点排行