Option Explicit
Private Declare Function SendMessageByRef Lib "user32" Alias "SendMessageA" (ByRef hWnd As Long, ByRef wMsg As Long, ByRef wParam As Long, ByRef lParam As Any) As Long
Private Declare Function SendMessageByVal Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Any) As Long
Private Declare Function GetTickCount Lib "kernel32" () As Long
Private Const CB_ADDSTRING = &H143
Private Sub Command1_Click()
Dim II As Long
Dim t As Long
Dim s As String
Combo1.Clear
t = GetTickCount()
'使用API ByRef
For II = 1 To 10000
s = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
'重新赋值以改变地址
SendMessageByRef Combo1.hWnd, CB_ADDSTRING, 0, s
Next
MsgBox "ByRef " & GetTickCount - t
Combo1.Clear
t = GetTickCount()
'使用API ByVal
For II = 1 To 10000
s = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
SendMessageByVal Combo1.hWnd, CB_ADDSTRING, 0, s
Next
MsgBox "ByVal " & GetTickCount - t
Combo1.Clear
t = GetTickCount()
'使用普通 ComboBox Add
For II = 1 To 10000
s = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
Combo1.AddItem s
Next
MsgBox "ComboBox Add " & GetTickCount - t
End Sub