在VB中使用API函數(shù)(Any)
- 發(fā)布于:2024-01-11
- 共 192 人圍觀
有些消息的參數(shù)聲明為Any.這表示該參數(shù)是一種可變的類型(你可以以整型,字符串,用戶自定義或其他的類型來(lái)傳遞).
這有一個(gè)這樣的例子:
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)傳遞.
這里是在這個(gè)函數(shù)中如果lParam是不同類型的值時(shí)應(yīng)遵循的規(guī)則:
如果該值是 傳遞形式
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)
如果你的函數(shù)聲明同上面的一個(gè)而且你想傳遞一個(gè)Long型數(shù),你應(yīng)該這樣寫:
Call SendMessage(Me.Hwnd,WM_XXXX,0&,ByVal LongValue)
注意盡管頭三個(gè)參數(shù)也是數(shù)值,但它們前邊并沒(méi)有ByVal.這是因?yàn)樵诤瘮?shù)聲明中它們已經(jīng)被聲明為按值傳遞(ByVal).第四個(gè)參數(shù),由于是按引用傳遞(ByRef)(VB并不知道你要傳遞參數(shù)的類型),因此你必須加上ByVal 你可以使用別名技術(shù)來(lái)傳遞不同類型的參數(shù):
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參數(shù)類型本身是不會(huì)改變的.例子中的第四個(gè)參數(shù)總是一個(gè)4字節(jié)的長(zhǎng)型數(shù).當(dāng)你按值(ByVal)傳遞一個(gè)Long或 Null時(shí),該4字節(jié)長(zhǎng)的數(shù)值就直接傳遞給函數(shù).如果你傳遞一個(gè)String或其他的什么,你是按引用(ByRef)傳遞,VB傳遞的實(shí)際上是變量的地址,也是4個(gè)字節(jié).
轉(zhuǎn)載請(qǐng)說(shuō)明出處:六百號(hào)技術(shù) - SEO優(yōu)化,網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)絡(luò)編程,軟件技巧,網(wǎng)絡(luò)知識(shí),系統(tǒng)技術(shù) ? 在VB中使用API函數(shù)(Any)
標(biāo)簽:
使用.NET開(kāi)發(fā)掃描電腦中服務(wù)的工具 下一篇
用Visual Basic實(shí)現(xiàn)多畫(huà)面播放功能之一