于是VB调用就很简单了,VB中把参数填入Long类型的数组中,调用CallProc,addr代表函数指针, pPrarm代表刚刚填好的参数数组的最后一个参数的地址(用VarPtr取得),conut代表参数数量,比如
Dim hModule As Long, pProc As Long,p(1) as Long
hModule = LoadLibrary("user32")
pProc = GetProcAddress(hModule, "FlashWindow")
If pProc <> 0 Then
p(0)=Me.Hwnd 'FlashWindow第一个参数
p(1)=1000 'FlashWindow第2个参数
Form1.Print CallProc(pProc, VarPtr(p(1)),2)
Else
MsgBox "err"
End If
FreeLibrary hModule
为方便调用,我简单封装了一个VB函数
Public Function StdCall(lpAddr As Long, ParamArray Param()) As Long
Dim p() As Long
If UBound(Param) <> -1 Then
ReDim p(0 To UBound(Param))
Dim i As Integer
For i = 0 To UBound(Param)
p(i) = Param(i)
Next i
StdCall = CallProc(lpAddr, VarPtr(p(UBound(Param))), UBound(Param) + 1)
Else
StdCall = CallProc(lpAddr, 0, 0)
End If
End Function