请问 VB6 如何弄出 CallBack 函数  ( 不使用 Class 的 Event )

解决方案 »

  1.   

    丢函数地址给调用方,再用callwindowproc在需要的时候调用:'窗体中
    Option ExplicitPrivate Declare Function CallWindowProc Lib "user32.dll" Alias "CallWindowProcW" ( _
         ByVal lpPrevWndFunc As Long, _
         ByVal hwnd As Long, _
         ByVal msg As Long, _
         ByVal wParam As Long, _
         ByVal lParam As Long) As LongDim lFunAddr As Long           '函数地址Private Sub Command1_Click()
        '需要时调用:
        Call CallWindowProc(lFunAddr, 0, 0, 0, 0)
    End SubPrivate Sub Form_Load()
        lFunAddr = GetAddress(AddressOf A)      '保存函数地址
    End Sub'标准模块中
    Option ExplicitFunction A() As Long
        MsgBox "A"
    End FunctionFunction GetAddress(ByVal Addr As Long) As Long
        GetAddress = Addr
    End Function
      

  2.   

    老大 如果函数带有参数的话, 要如何呼叫Function A(s as string) As Long
        MsgBox s
    End Function
      

  3.   

    CallWindowProc后面的四个参数其实就是PUSH给堆栈的参数,会被第一个指针里的函数取得.所以只要你的参数在四个以内,直接用它吧.不过呢,有个限制,就是只能传32位的值.如果你要传字符串之类的,只能传入指针,再在函数里根据这个指针取得字符串了.麻烦是麻烦了点,自己决定值或不值吧.