成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

VB.NET使用Alias子句簡介

開發 后端
這里介紹VB.NET使用Alias子句,如果沒有VB.NET使用Alias子句,那么在 Function(或Sub)后的函數名也是區分大小寫的。

學習VB.NET時,你可能會遇到VB.NET使用Alias子句問題,這里將介紹VB.NET使用Alias子句問題的解決方法,在這里拿出來和大家分享一下。

Declare語句中的Alias子句是一個可選的部分,用戶可以通過它所標識的別名對動態 庫中的函數進行引用。例如,在下面的語句中,聲明了一個在VB中名為MyFunction的函數,而它在動態庫Mydll.dll中最初的名字是MyFunctionX。

  1. Private Declare Function MyFunction Lib "Mydll.dll" _Alias "MyFunctionX" ( ) As Long  

需要注意的是,Alias子句中的函數名是大小寫敏感的,也就是說,必須與函數在生成時的聲明(如在C源文件中的聲明)一致。這是因為32位動態庫與16位動態庫不同,其中的函數名是區分大小寫的。同樣道理,如果沒有VB.NET使用Alias子句,那么在 Function(或Sub)后的函數名也是區分大小寫的。

通常在以下幾種情況時需要VB.NET使用Alias子句:

1.處理使用字符串的系統Windows API過程

如果調用的系統Windows API過程要使用字符串,那么聲明語句中必須增加一個Alias 子句,以指定正確的字符集。包含字符串的系統Windows API函數實際有兩種格式:ANSI和Unicode(關于ANSI和Unicode兩種字符集的區別將在后面詳細闡述)。因此,在Windows頭文件中,每個包含字符串的函數都同時有ANSI版本和Unicode版本。例如,下面是SetWindowText函數的兩種C語言描述。可以看到,第一個描述將函數定義為SetWindowTextA,尾部的"A" 表明它是一個ANSI函數:

  1. WINUSERAPI BOOL WINAPI SetWindowTextA(HWND hWnd, LPCSTR lpString);  

第二個描述將它定義為 SetWindowTextW, 尾部的"W" 表明它是一個 Unicode 函數:

  1. WINUSERAPI BOOL WINAPI SetWindowTextW(HWND hWnd, LPCWSTR lpString);  

因為兩個函數實際的名稱都不是"SetWindowText",要引用正確的函數就必 須增加一個Alias子句:

  1. Private Declare Function SetWindowText Lib "user32" _  
  2. Alias "SetWindowTextA" (ByVal hwnd As Long, ByVal _  
  3. lpString As String) As Long 

應當注意,對于VB中使用的系統WindowsAPI函數,應該指定函數的ANSI版本,因為只 有WindowsNT才支持Unicode版本,而Windows95不支持這個版本。僅當應用程序只運行 在WindowsNT平臺上的時候才可以使用Unicode版本。

2.函數名是不標準的名稱

有時,個別的DLL過程的名稱不是有效的標識符。例如,它可能包含了非法的字符(如連字符),或者名稱是VB的關鍵字(如GetObject)。在這種情況下,可以使用Alias關鍵字。例如,操作環境DLLs中的某些過程名以下劃線開始。盡管在VB標識符中允許使用標識符,但是下劃線不能作為標識符的第一個字符。為了使用這種過程,必須先聲明一個名稱合法的過程,然后VB.NET使用Alias子句引用過程的真實名稱:

  1. Declare Function lopen Lib "kernel32" Alias "_lopen" _  
  2. (ByVal lpPathName As String, ByVal iReadWrite _  
  3. As Long) As Long 

在上例中,lopen是VB中使用的過程名稱。而_lopen則是動態連接庫中可以識別的名 稱。

3.使用序號標識DLL過程

除了使用名稱之外,還可以使用序號來標識DLL過程。某些動態連接庫中不包含過程的名稱,在聲明它們包含的過程時必須使用序號。同使用名稱標識的DLL過程相比,如果使用序號,在最終的應用程序中消耗的內存將比較少,而且速度會快些。但是,一個具體的API的序號在不同的操作系統中可能是不同的。例如GetWindowsDirectory在Win95下的序號為432,而在WindowsNT4.0下為338。總而言之,如果希望應用程序能夠在不同的操作系統下運行,那么最好不要使用序號來標識API過程。如果過程不屬于API,或者應用程序使用的范圍很有限,那么使用序號還是有好處的。

要使用序號來聲明DLL過程,Alias子句中的字符串需要包含過程的序號,并在序號的 前面加一個數字標記字符(#)。例如,Windowskernel中的GetWindowsDirectory函數的序 號為432;可以用下面的語句來聲明該DLL過程:

  1. Declare Function GetWindowsDirectory Lib "kernel32" _  
  2. Alias "#432" (ByVal lpBuffer As String, _  
  3. ByVal nSize As Long) As Long 

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

為了得到要聲明的過程的序號,可以使用Dumpbin.exe等實用工具(Dumpbin.exe是Microsoft VisualC++提供的一個實用工具,它的使用說明可以參見VC的文檔)。利用Dumpbin,可以提取出.dll文件中的各種信息,例如DLL中的函數列表,它們的序號以及與代碼有關的其它信息。

【編輯推薦】

  1. 詳細描述VB調用動態連接庫
  2. 敘述VB.NET創建控件數組
  3. 淺析VB.NET繪制GDI圖形的方法
  4. 講解VB.NET訪問注冊表方法
  5. 概括VB.NET獲取網卡地址的步驟
責任編輯:佚名 來源: IT168
相關推薦

2009-11-02 17:54:44

VB.NET數組

2009-10-12 14:13:00

VB.NET使用局部變

2009-10-14 13:21:46

VB.NET Acco

2009-10-28 17:44:31

VB.NET語言

2009-10-30 15:37:23

VB.NET Sub創

2009-10-15 09:16:35

VB.NET重新申明數

2009-10-26 15:57:07

VB.NET使用Ora

2009-11-03 13:48:02

VB.NET枚舉

2009-10-14 17:08:44

VB.NET使用Fil

2010-01-11 16:04:10

VB.NET使用wit

2010-01-15 16:29:47

VB.NET對象存儲

2009-11-03 11:27:30

VB.NET界面

2010-01-18 18:20:49

VB.NET使用API

2009-10-09 14:55:02

VB.NET數組

2009-10-20 10:29:30

VB.NET使用Sor

2009-11-02 13:54:27

VB.NET shel

2009-10-13 15:20:02

VB.NET使用Dra

2009-10-13 15:09:19

VB.NET使用Tre

2009-10-16 14:07:18

VB.NET使用Mon

2009-10-16 10:14:26

VB.NET使用Fil
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 伊人久久在线观看 | 成人av在线网站 | 国产综合第一页 | 亚洲一区二区视频在线观看 | 亚洲综合大片69999 | 五月天国产 | 亚洲欧美国产视频 | 欧美区在线观看 | 亚洲性视频 | 狠狠干av | av大片 | 欧美一区二区三区一在线观看 | 看毛片的网站 | 一区二区三区在线 | 在线观看亚洲专区 | 亚洲福利在线视频 | 另类在线 | 午夜大片 | 亚州午夜精品 | 亚洲一区二区精品视频 | 国产精品九九九 | 久久久人成影片一区二区三区 | 欧美xxxx色视频在线观看免费 | 九色视频网站 | 亚洲精品自在在线观看 | 欧美日韩a| 一区二区三区免费看 | 精品国产鲁一鲁一区二区张丽 | 69福利影院 | 亚洲成人一区二区 | 秋霞电影一区二区三区 | 欧美综合久久 | 国产午夜av片 | 日韩美女在线看免费观看 | 美女视频黄的免费 | 欧美一二精品 | 在线一区二区三区 | 日日干天天干 | 水蜜桃亚洲一二三四在线 | 久久91av| 国产91亚洲精品一区二区三区 |