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

解决方案 »

  1.   

    你err = GetLastError的时候错误还没发生呢.
    应该在前面加 On error goto ErrLine
    代码结尾处放置Errline:处理错误信息
      

  2.   

    你不用管我err = GetLastError 这一句 我这一句是为了测试并没有实质的用处。
    就是说
    Private Sub Form_Load()
    cc = SetUnhandledExceptionFilter(AddressOf UnhandledExceptionFilter)
    Dim a As Long
    a = 2 ^ 32 '这个地方是溢出 为什么捕获不到
    End Sub这个样子还是没办法触发异常。。 我试了下内存错误 也是触发不到。 这个应该怎么做啊? 
      

  3.   

    因为VB编译后的程序已经添加了SEH了,你这样添加不可以的.
    vb编译程序的每个过程都有:.text:00401BE6                 push    (offset loc_401095+1)
    .text:00401BEB                 mov     eax, large fs:0
    .text:00401BF1                 push    eax
    .text:00401BF2                 mov     large fs:0, esp
    .text:00401BF9                 sub     esp, 18h人家都设置好SEH了,如果你要用自己的SEH,需要处理前面VB编译器已经设置的SEH类似文章:
    http://www.pediy.com/kssd/pediy07/pediy7-759.htm
      

  4.   

    接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]那些数据...
      

  5.   

    http://topic.csdn.net/u/20090714/04/6c925475-9b01-402e-83aa-24846bed0b24.html?92432
    API并不能捕获所有异常,msdn有说明
      

  6.   

    Private Sub Form_Load()
    on error resume next
    cc = SetUnhandledExceptionFilter(AddressOf UnhandledExceptionFilter)Dim a As Long
    a = 2 ^ 32 '这个地方是溢出 为什么捕获不到Dim err As Long
    err = GetLastError
    Debug.Print err
    End Sub
      

  7.   

    此错误已由VB6处理好了,并由Err对象进行管理。非VB6范围内的错误,例如内存读写错误,这才是自己写SEH的目标.例子:http://www.m5home.com/bak_blog/article/294.html看你的样子,是想做一个全局的错误捕捉功能是吧,那你要处理的事情就多了.首先是函数调用栈,然后错误原因,接着如何抛出错误,后面又如何处理错误.....别以为是VB代码级,这些全是在汇编代码级要做的事.假如你完成这些,还要再定位到IDE中的VB代码里(假设你是要做个IDE的全局错误捕捉插件的话),又还有一堆的事....总之....加油吧.