在VB中使用API函數(Any)
- 發布于:2024-01-11
- 共 187 人圍觀
有些消息的參數聲明為Any.這表示該參數是一種可變的類型(你可以以整型,字符串,用戶自定義或其他的類型來傳遞).
這有一個這樣的例子:
Public Declare Function SendMessage Lib "User32" Alias "SendMessageA" ByVal Hwnd as Long, ByVal wMsg as Long, ByVal wParam as Long, lParam as Any) as Long
lParam 聲明為Any并按引用(ByRef)傳遞.
這里是在這個函數中如果lParam是不同類型的值時應遵循的規則:
如果該值是 傳遞形式
numeric ByVal(as Long,or as Any)
Null ByVal(as Long,or as Any)
String ByRef(as String,or as Any)
Type ByRef(as Any)
array of Type ByRef(as Any)
如果你的函數聲明同上面的一個而且你想傳遞一個Long型數,你應該這樣寫:
Call SendMessage(Me.Hwnd,WM_XXXX,0&,ByVal LongValue)
注意盡管頭三個參數也是數值,但它們前邊并沒有ByVal.這是因為在函數聲明中它們已經被聲明為按值傳遞(ByVal).第四個參數,由于是按引用傳遞(ByRef)(VB并不知道你要傳遞參數的類型),因此你必須加上ByVal 你可以使用別名技術來傳遞不同類型的參數:
Public Declare Function SendMessageLng Lib "User32" Alias "SendMessageA"(ByVal Hwnd as Long, ByVal wMsg as Long, ByVal wParam as Long, ByVal lParam as Long) as Long
或:
Public Declare Function SendMessageStr Lib "User32" Alias "SendMessageA"(ByVal Hwnd as Long, ByVal wMsg as Long, ByVal wParam as Long, lParam as String) as Long
注意API參數類型本身是不會改變的.例子中的第四個參數總是一個4字節的長型數.當你按值(ByVal)傳遞一個Long或 Null時,該4字節長的數值就直接傳遞給函數.如果你傳遞一個String或其他的什么,你是按引用(ByRef)傳遞,VB傳遞的實際上是變量的地址,也是4個字節.
標簽: