如何在VB6中編寫回調函數?我知道AddressOf讓你的函數獲取Long中的地址。但是,如何使用內存地址調用函數?謝謝!如何在VB6中編寫回調?
回答
我不知道你想要做什麼。
到invert control,只需在類中創建回調函數即可。然後使用該類的一個實例(一個對象)進行回調。
- 如果您需要在運行時在不同的例程之間切換,請將不同的類實現相同的接口 - strategy pattern。
- 恕我直言
AddressOf
是太複雜和風險使用這種方式。
AddressOf
應只有來,如果你需要register callback functions與Windows API使用。
我在主要評論主題上發佈了我的意圖。但是我會在這裏重新發布:在一個模塊中有一個函數需要多個循環。我正在考慮使用函數的回調函數讓調用者知道進度。所以我會使用它幾乎就像一個事件,除了從一個功能,而不是一個類。 – 2010-11-15 17:38:26
糟糕,我忽略了這些評論。那麼,你能不能將一個對象傳遞給該函數,然後回調該對象?或者把這個函數放到一個新的類中,並且從類中引發事件?兩者都很乾淨的OO模式。 VB6中缺少委託的解決方法。 – MarkJ 2010-11-15 21:21:44
This post在vbforums.com上給出了一個如何使用AddressOf和CallWindowProc函數來執行回調過程的例子。從崗位
代碼:
Private Declare Function CallWindowProc _
Lib "user32.dll" Alias "CallWindowProcA" (_
ByVal lpPrevWndFunc As Long, _
ByVal hwnd As Long, _
ByVal msg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long
Private Sub ShowMessage(_
msg As String, _
ByVal nUnused1 As Long, _
ByVal nUnused2 As Long, _
ByVal nUnused3 As Long)
'This is the Sub we will call by address
'it only use one argument but we need to pull the others
'from the stack, so they are just declared as Long values
MsgBox msg
End Sub
Private Function ProcPtr(ByVal nAddress As Long) As Long
'Just return the address we just got
ProcPtr = nAddress
End Function
Public Sub YouCantDoThisInVB()
Dim sMessage As String
Dim nSubAddress As Long
'This message will be passed to our Sub as an argument
sMessage = InputBox("Please input a short message")
'Get the address to the sub we are going to call
nSubAddress = ProcPtr(AddressOf ShowMessage)
'Do the magic!
CallWindowProc nSubAddress, VarPtr(sMessage), 0&, 0&, 0&
End Sub
- 1. 如何編寫C#來調用vb6代碼?
- 2. 如何編寫按鈕回調?
- 3. 如何爲Zapier編寫回調函數
- 4. 如何爲DirectionsService編寫回調函數
- 5. 如何在squelize nodejs中編寫回調函數?
- 6. 如何在jQuery插件中編寫回調處理函數
- 7. 如何在shutil.copytree中編寫忽略回調函數
- 8. 如何在C#lambda語法中編寫以下回調延續?
- 9. 如何在COBOL中編寫SQLite回調函數
- 10. 如何在nodejs中編寫可選的回調方法
- 11. 如何使用TaskDialogIndirect在vb6中獲得回調函數?
- 12. 如何在vb6中編碼這一個?
- 13. 如何在vb6中調用命令行
- 14. 如何在VB6中調用Web服務?
- 15. 在VB6中寫入FastCGI?
- 16. rails,如何在ajax請求完成後編寫回調函數
- 17. VB6 AddressOf和VS 2008中的回調
- 18. 如何從AutoHotkey腳本調用vb6中的.dll編碼?
- 19. 如何調試VB6崩潰?
- 20. 如何在Java API中編寫調試代碼 - 編程風格
- 21. 如何在VB6
- 22. 如何從通過VB6編寫的dll檢索源代碼?
- 23. 如何在javadoc中編寫「@」?
- 24. 如何在Lua中編寫代碼「在調試器中」?
- 25. VB6 COM在byRef Variant中返回ADODB.Recordset。如何在C#中檢索?
- 26. 在VB6中寫入附加文本文件(utf-8編碼)
- 27. 在VB中編寫一個布爾類似VB6
- 28. 使用Sax解析在VB6中編輯和寫入XML
- 29. 如何編寫簡單的回調函數?
- 30. 如何爲我的WCF服務編寫回調通道?
你需要什麼回調?這個答案會有很大的不同。 – 2010-11-15 15:18:08
我有一個模塊的功能需要超過幾個週期。我正在考慮使用函數的回調函數讓調用者知道進度。所以我會使用它幾乎就像一個事件,除了從一個功能,而不是一個類。 – 2010-11-15 17:36:56