果洛皆料电子有限公司

在VB中使用API函數(shù)(Any)

  • 發(fā)布于:2024-01-11
  • 192 人圍觀
Any

  有些消息的參數(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é).
萬(wàn)企互聯(lián)
標(biāo)簽: