一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

VB之API初學(xué)者教程第三章

 悟靜 2009-08-03

VB之API初學(xué)者教程第三章:Any、參數(shù)傳遞

來源:http://www./vb.asp?page=1&1

Any
有些消息的參數(shù)聲明為Any.這表示該參數(shù)是一種可變的類型(你可以以整型,字符串,用戶自定義或其他的類型來傳遞).
這有一個這樣的例子:
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)傳遞.
這里是在這個函數(shù)中如果lParam是不同類型的值時應(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ù)聲明同上面的一個而且你想傳遞一個Long型數(shù),你應(yīng)該這樣寫:
Call SendMessage(Me.Hwnd,WM_XXXX,0&,ByVal LongValue)
注意盡管頭三個參數(shù)也是數(shù)值,但它們前邊并沒有ByVal.這是因為在函數(shù)聲明中它們已經(jīng)被聲明為按值傳遞(ByVal).第四個參數(shù),由于是按引用傳遞(ByRef)(VB并不知道你要傳遞參數(shù)的類型),因此你必須加上ByVal 你可以使用別名技術(shù)來傳遞不同類型的參數(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ù)類型本身是不會改變的.例子中的第四個參數(shù)總是一個4字節(jié)的長型數(shù).當(dāng)你按值(ByVal)傳遞一個Long或 Null時,該4字節(jié)長的數(shù)值就直接傳遞給函數(shù).如果你傳遞一個String或其他的什么,你是按引用(ByRef)傳遞,VB傳遞的實際上是變量的地址,也是4個字節(jié).

參數(shù)傳遞
你已經(jīng)知道如何傳遞參數(shù)了,只需把他放到調(diào)用的函數(shù)中即刻.然而,當(dāng)你使用API函數(shù)時,在傳遞參數(shù)是有一些你應(yīng)該注意的 細節(jié). ByVal還是ByRef. 通常情況下,你不用為此擔(dān)心,VB的API瀏覽器已經(jīng)為你做好了一切,只需你輸入數(shù)值它就會照所聲明的方式傳遞.總的來說,ByVal是把實際的數(shù)值傳遞給函數(shù),而ByRef是把地址傳給函數(shù).唯一的麻煩就是 Any 類型. 把字符串傳遞給API函數(shù)也并不難.API函數(shù)需要的是字符串首字符的地址,然后讀取該地址直到遇到一個Null字符.聽起來很糟糕,但只是VB處理字符串的實際方法.你唯一要記住的是一定要按引用傳遞(ByRef)字符串 當(dāng)你想得到所需的函數(shù)返回值信息時,情況有稍微的一點不同.
這里是GetComputerName函數(shù)的聲明:
Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA"(ByVal lpBuffer As String, nSize As Long) As Long
第一個參數(shù)是一個指向字符串的遠程指針,第二個參數(shù)是字符串的長度.
如果你只是簡單的聲明一個字符串類型的變量并把它傳遞給函數(shù),就會出現(xiàn)錯誤.因此,你首先需要初始化字符串.這里是如何得到計算機名字的例子: Dim Buffer As String
Buffer = Space(255)
Ret& = GetComputerName(Buffer, Len(Buffer))
if Ret& > 0 then CompName$ = Left(Buffer, Ret&)
在這里,待傳遞的字符串被初始化為有255個空格的字符串.我們把它傳遞給函數(shù)同時還有它的長度.如果出錯則返回值為0.
CompName中將保存計算機名. 有些函數(shù)也需要傳遞數(shù)組,這里是一個例子:
Declare Function SetSysColors Lib "user32" Alias "SetSysColors" (ByVal nChanges As Long, lpSysColor As Long, lpColorValues As Long) As Long
最后兩個參數(shù)是Long型數(shù)組.為了傳遞數(shù)組,你只需傳遞它的第一個元素.下面是示例代碼:
Const COLOR_ACTIVECAPTION = 2
Const COLOR_INACTIVECAPTION = 3
Const COLOR_CAPTIONTEXT = 9
Const COLOR_INACTIVECAPTIONTEXT = 19
Dim SysColor(3) As Long
Dim ColorValues(3) As Long
Dim Ret& SysColor(0) = COLOR_ACTIVECAPTION
SysColor(1) = COLOR_INACTIVECAPTION
SysColor(2) = COLOR_CAPTIONTEXT
SysColor(3) = COLOR_INACTIVECAPTIONTEXT
ColorValues(0) = RGB(58, 158, 58) ’深綠
ColorValues(1) = RGB(93, 193, 93) ’淺綠
ColorValues(2) = 0 ’黑色
ColorValues(3) = RGB(126, 126, 126) ’灰色
Ret& = SetSysColors(4&, SysColor(0), ColorValues(0))
該程序?qū)⒏淖兯谢顒雍头腔顒哟翱诘臉祟}欄背景和文本的顏色.
(搜集整理)
------------------------------------------------
(http://www.提示:作者未知,感謝作者寫出這么好的文檔,特發(fā)布與大家共享,一起學(xué)習(xí)交流,有知道作者的朋友請給出作者地址,發(fā)布到評論中,核實后我們后把來源和作者姓名重新編排到文章中。)

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    日韩一级免费中文字幕视频| 国产日产欧美精品大秀| 欧美国产在线观看精品| 久久久免费精品人妻一区二区三区| 日本不卡一本二本三区| 婷婷色香五月综合激激情| 不卡免费成人日韩精品| 高清在线精品一区二区| 天堂网中文字幕在线视频| 亚洲中文字幕一区三区| 欧美又大又黄刺激视频| 极品少妇嫩草视频在线观看| 欧美日韩国产二三四区| 亚洲内射人妻一区二区| 国产亚洲欧美一区二区| 精品女同在线一区二区| 久久免费精品拍拍一区二区| 老司机激情五月天在线不卡| 午夜精品久久久99热连载| 国产精品亚洲二区三区| 欧美六区视频在线观看| 日本欧美一区二区三区高清| 国产目拍亚洲精品区一区| 在线日韩中文字幕一区| 草草草草在线观看视频| 亚洲一区二区亚洲日本| 欧美日韩综合综合久久久| 99一级特黄色性生活片| 成人精品一级特黄大片| 日本欧美视频在线观看免费 | 国产亚洲精品一二三区| 国产午夜福利在线观看精品| 日本妇女高清一区二区三区| 国产av一区二区三区麻豆| 九九视频通过这里有精品| 亚洲视频一区二区久久久| 国产不卡视频一区在线| 国产精品超碰在线观看| 色小姐干香蕉在线综合网| 国产亚洲精品久久久优势| 日韩无套内射免费精品|