有这样一段代码:
Private Function WndProc(ByVal hWnd As Long, ByVal Msg As Long, _
                       ByVal wParam As Long, ByVal lParam As Long) As Long
    'call API Function
    WndProc = CallWindowProc(mprevWndProc, hWnd, Msg, wParam, lParam)
    Select Case Msg
    Case WM_COMMAND
        Select Case wParam
        Case CBN_CLOSEUP        'closeup the dropdown
            mSelStatus = 0
        Case CBN_SELENDCANCEL   'not selection
            mSelStatus = 2
        Case CBN_SELENDOK       'selection
            mSelStatus = 1
        End Select
    End Select
End Function
'执行到这个函数时,就报有一个AddressOf操作符的语法错误,光标就停到方框处.
'请大家帮忙看一下到底哪有错。
Private Function GetPrevHandl(ByVal frmhWnd As Long) As Long
    On Error GoTo Handle_Error
    GetPrevHandl = 0
    mprevWndProc = GetWindowLong(frmhWnd, GWL_WNDPROC)
                                            ____________________ 
    Call SetWindowLong(frmhWnd, GWL_WNDPROC,| AddressOf WndProc|)
                                            -------------------- 
    Exit Function
Handle_Error:
    GetPrevHandl = -1
End Function
'谢谢了

解决方案 »

  1.   

    Private Function WndProc(ByVal hWnd As Long, ByVal Msg As Long, _
                           ByVal wParam As Long, ByVal lParam As Long) As Long
    此函数应在一模块(.BAS)中定义且Private要改为Public即可.
      

  2.   

    如zhou_huanxi(阿周)所说,回调函数只能放在模块(不是类模块)中,且必须是公有(Public)
      

  3.   

    回调函数只能放在模块(不是类模块)中,且必须是公有(Public) ----  (√)
      

  4.   

    我做这样类似的程序时回调函数是放在模块(不是类模块)中的,而且也是公有的(Public),
    但是一运行就死机,不知道是怎么回事.烦请指教!!