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

分享

VB 聲明中alias的作用與含義

 華燈初放l 2016-07-27
    Declare語句中的Alias子句是一個(gè)可選的部分,用戶可以通過它所標(biāo)識(shí)的別名對(duì)動(dòng)態(tài) 庫(kù)中的函數(shù)進(jìn)行引用。例如,在下面的語句中,聲明了一個(gè)在VB中名為MyFunction的函數(shù),而它在動(dòng)態(tài)庫(kù)Mydll.dll中最初的名字是MyFunctionX。
Private Declare Function MyFunction Lib "Mydll.dll" Alias "MyFunctionX" ( ) As Long

需要注意的是,Alias子句中的函數(shù)名是大小寫敏感的,也就是說,必須與函數(shù)在生成時(shí)的聲明(如在C源文件中的聲明)一致。這是因?yàn)?2位動(dòng)態(tài)庫(kù)與16位動(dòng)態(tài)庫(kù)不同,其中的函數(shù)名是區(qū)分大小寫的。同樣道理,如果沒有使用Alias子句,那么在Function(或Sub)后的函數(shù)名也是區(qū)分大小寫的。

通常在以下幾種情況時(shí)需要使用Alias子句:

A.處理使用字符串的系統(tǒng)Windows API過程
如果調(diào)用的系統(tǒng)Windows API過程要使用字符串,那么聲明語句中必須增加一個(gè)Alias 子句,以指定正確的字符集。包含字符串的系統(tǒng)Windows API函數(shù)實(shí)際有兩種格式:ANSI和Unicode( 關(guān)于ANSI和Unicode兩種字符集的區(qū)別將在后面詳細(xì)闡述)。因此,在Windows頭文件中,每 個(gè)包含字符串的函數(shù)都同時(shí)有ANSI版本和Unicode版本。例如,下面是SetWindowText函數(shù) 的兩種C語言描述。可以看到,第一個(gè)描述將函數(shù)定義為SetWindowTextA,尾部的"A" 表明它是一個(gè)ANSI函數(shù):
WINUSERAPI BOOL WINAPI SetWindowTextA(HWND hWnd, LPCSTR lpString);

第二個(gè)描述將它定義為 SetWindowTextW, 尾部的"W" 表明它是一個(gè)Unicode 函數(shù):
WINUSERAPI BOOL WINAPI SetWindowTextW(HWND hWnd, LPCWSTR lpString);

因?yàn)閮蓚€(gè)函數(shù)實(shí)際的名稱都不是"SetWindowText",要引用正確的函數(shù)就必 須增加一個(gè)Alias子句:
Private Declare Function SetWindowText Lib "user32" _
Alias "SetWindowTextA" (ByVal hwnd As Long, ByVal _
lpString As String) As Long

應(yīng)當(dāng)注意,對(duì)于VB中使用的系統(tǒng)WindowsAPI函數(shù),應(yīng)該指定函數(shù)的ANSI版本,因?yàn)橹?有WindowsNT才支持Unicode版本,而Windows95不支持這個(gè)版本。僅當(dāng)應(yīng)用程序只運(yùn)行 在WindowsNT平臺(tái)上的時(shí)候才可以使用Unicode版本。

B.函數(shù)名是不標(biāo)準(zhǔn)的名稱

有時(shí),個(gè)別的DLL過程的名稱不是有效的標(biāo)識(shí)符。例如,它可能包含了非法的字符(如連 字符),或者名稱是VB的關(guān)鍵字(如GetObject)。在這種情況下,可以使用Alias關(guān)鍵字。例 如,操作環(huán)境DLLs中的某些過程名以下劃線開始。盡管在VB標(biāo)識(shí)符中允許使用標(biāo)識(shí)符,但是 下劃線不能作為標(biāo)識(shí)符的第一個(gè)字符。為了使用這種過程,必須先聲明一個(gè)名稱合法的過程, 然后用Alias子句引用過程的真實(shí)名稱:
Declare Function lopen Lib "kernel32" Alias "_lopen" _
(ByVal lpPathName As String, ByVal iReadWrite _
As Long) As Long

在上例中,lopen是VB中使用的過程名稱。而_lopen則是動(dòng)態(tài)連接庫(kù)中可以識(shí)別的名稱。

C.使用序號(hào)標(biāo)識(shí)DLL過程

除了使用名稱之外,還可以使用序號(hào)來標(biāo)識(shí)DLL過程。某些動(dòng)態(tài)連接庫(kù)中不包含過程的名稱,在聲明它們包含的過程時(shí)必須使用序號(hào)。同使用名稱標(biāo)識(shí)的DLL過程相比,如果使用序號(hào),在最終的應(yīng)用程序中消耗的內(nèi)存將比較少,而且速度會(huì)快些。但是,一個(gè)具體的API的序號(hào) 在不同的操作系統(tǒng)中可能是不同的。例如GetWindowsDirectory在Win95下的序號(hào)為432,而在WindowsNT4.0下為338??偠灾绻M麘?yīng)用程序能夠在不同的操作系統(tǒng)下運(yùn)行,那么最好不要使用序號(hào)來標(biāo)識(shí)API過程。如果過程不屬于API,或者應(yīng)用程序使用的范圍很有 限,那么使用序號(hào)還是有好處的。

要使用序號(hào)來聲明DLL過程,Alias子句中的字符串需要包含過程的序號(hào),并在序號(hào)的前面加一個(gè)數(shù)字標(biāo)記字符(#)。例如,Windowskernel中的GetWindowsDirectory函數(shù)的序號(hào)為432;可以用下面的語句來聲明該DLL過程:
 
Declare Function GetWindowsDirectory Lib "kernel32" _
Alias "#432" (ByVal lpBuffer As String, _
ByVal nSize As Long) As Long

在這里,可以使用任意的合法名稱作為過程的名稱,VB將用序號(hào)在DLL中尋找過程。          

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

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    91国内视频一区二区三区| 黄色日韩欧美在线观看| 色无极东京热男人的天堂| 国产精品一级香蕉一区| 国产成人午夜在线视频| 美女黄片大全在线观看| 日韩高清一区二区三区四区| 色综合久久中文综合网| 丰满少妇高潮一区二区| 日韩中文字幕狠狠人妻| 国产剧情欧美日韩中文在线| 亚洲精品偷拍一区二区三区| 欧美人禽色视频免费看 | 国产成人午夜在线视频| 日本av在线不卡一区| 亚洲午夜av久久久精品| 日韩精品你懂的在线观看| 青青操日老女人的穴穴| 亚洲中文字幕人妻av| 色鬼综合久久鬼色88| 日本午夜精品视频在线观看| 久久女同精品一区二区| 自拍偷女厕所拍偷区亚洲综合| 91爽人人爽人人插人人爽| 日韩不卡一区二区视频| 成人欧美一区二区三区视频| 亚洲男人天堂成人在线视频| 中文字幕亚洲视频一区二区| 亚洲一区二区三区三州| 色鬼综合久久鬼色88| 十八禁日本一区二区三区| 久草热视频这里只有精品| 亚洲少妇一区二区三区懂色| 日韩夫妻午夜性生活视频| 国产精品福利精品福利| 国产一区一一一区麻豆| 精品少妇一区二区三区四区| 免费一级欧美大片免费看| 视频在线免费观看你懂的| 国产亚洲精品岁国产微拍精品| 99久久精品视频一区二区|