3 回答

TA貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超6個(gè)贊
Declare 語句
用于在模塊級(jí)別中聲明對(duì)動(dòng)態(tài)鏈接庫(kù) (DLL) 中外部過程的引用。
語法 1
[Public | Private] Declare Sub name Lib "libname" [Alias "aliasname"] [([arglist])]
語法 2
[Public | Private] Declare Function name Lib "libname" [Alias "aliasname"] [([arglist])] [As type]
Declare 語句的語法包含下面部分:
部分 描述
Public 可選的。用于聲明對(duì)所有模塊中的所有其它過程都可以使用的過程。
Private 可選的。用于聲明只能在包含該聲明的模塊中使用的過程。
Sub 可選的(但 Sub 或 Function 二者需選其一)。表示該過程沒有返回值。
Function 可選的(但 Sub 或 Function 二者需選其一)。表示該過程會(huì)返回一個(gè)可用于表達(dá)式的值。
name 必需的。任何合法的過程名。注意動(dòng)態(tài)鏈接庫(kù)的入口處(entry points)區(qū)分大小寫。
Lib 必需的。指明包含所聲明過程的動(dòng)態(tài)鏈接庫(kù)或代碼資源。所有聲明都需要 Lib 子句。
libname 必需的。包含所聲明的過程動(dòng)態(tài)鏈接庫(kù)名或代碼資源名。
Alias 可選的。表示將被調(diào)用的過程在動(dòng)態(tài)鏈接庫(kù) (DLL) 中還有另外的名稱。當(dāng)外部過程名與某個(gè)關(guān)鍵字重名時(shí),就可以使用這個(gè)參數(shù)。當(dāng)動(dòng)態(tài)鏈接庫(kù)的過程與同一范圍內(nèi)的公用變量、常數(shù)或任何其它過程的名稱相同時(shí),也可以使用 Alias。如果該動(dòng)態(tài)鏈接庫(kù)過程中的某個(gè)字符不符合動(dòng)態(tài)鏈接庫(kù)的命名約定時(shí),也可以使用 Alias。
aliasname 可選的。動(dòng)態(tài)鏈接庫(kù)或代碼資源中的過程名。如果首字符不是數(shù)字符號(hào) (#),則 aliasname 是動(dòng)態(tài)鏈接庫(kù)中該過程的入口處的名稱。如果首字符是 (#),則隨后的字符必須指定該過程的入口處的順序號(hào)。
arglist 可選的。代表調(diào)用該過程時(shí)需要傳遞的參數(shù)的變量表。
type 可選的。Function 過程返回值的數(shù)據(jù)類型;可以是 Byte、布爾、Integer、Long、Currency、Single、Double、Decimal(目前尚不支持)、Date、String(只支持變長(zhǎng))或 Variant,用戶定義類型,或?qū)ο箢愋汀?br/>
arglist 參數(shù)的語法以及語法各個(gè)部分如下:
[Optional] [ByVal | ByRef] [ParamArray] varname[( )] [As type]
部分 描述
Optional 可選的。表示參數(shù)不是必需的。如果使用該選項(xiàng),則 arglist 中的后續(xù)參數(shù)都必需是可選的,而且必須都使用 Optional 關(guān)鍵字聲明。如果使用了 ParamArray,則任何參數(shù)都不能使用 Optional。
ByVal 可選的。表示該參數(shù)按值傳遞。
ByRef 表示該參數(shù)按地址傳遞。 ByRef 是 Visual Basic 的缺省選項(xiàng)。
ParamArray 可選的。只用于 arglist 的最后一個(gè)參數(shù),表示最后的參數(shù)是一個(gè) Variant 元素的 Optional 的數(shù)組。使用 ParamArray 關(guān)鍵字可以提供任意數(shù)目的參數(shù)。ParamArray 關(guān)鍵字不能與 ByVal、ByRef或 Optional 一起使用。
varname 必需的。代表傳給該過程的參數(shù)的變量名;遵循標(biāo)準(zhǔn)的變量命名約定。
( ) 對(duì)數(shù)組變量是必需的。指明 varname 是一個(gè)數(shù)組。
type 可選的。傳遞給該過程的參數(shù)的數(shù)據(jù)類型;可以是 Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal(目前尚不支持)、Date、String(只支持變長(zhǎng))、Object、Variant、用戶自定義的類型或?qū)ο箢愋汀?br/>
說明
對(duì)Function 過程而言,過程的數(shù)據(jù)類型決定其返回值的數(shù)據(jù)類型。可以在 arglist 之后使用 As 子句來指定函數(shù)返回值的數(shù)據(jù)類型。在 arglist 中,可以使用 As 子句來指定任何傳給該過程的參數(shù)的數(shù)據(jù)類型。不單可以指定為任何標(biāo)準(zhǔn)數(shù)據(jù)類型,還可以在 arglist 中指定 As Any 來禁止類型檢查,從而允許將任意數(shù)據(jù)類型傳遞給該過程。
空?qǐng)A括號(hào)表示該 Sub 或 Function 過程沒有參數(shù),且 Visual Basic 應(yīng)確保不會(huì)傳遞任何參數(shù)。在下面的示例中,F(xiàn)irst 不帶任何參數(shù)。如果對(duì) First 的調(diào)用中使用了參數(shù),就會(huì)產(chǎn)生錯(cuò)誤:
Declare Sub First Lib "MyLib" ()
如果帶參數(shù)表,則每次調(diào)用該過程時(shí)都要檢查參數(shù)的個(gè)數(shù)和類型。在下面的示例中,F(xiàn)irst 有一個(gè) Long 參數(shù):
Declare Sub First Lib "MyLib" (X As Long)
注意 在 Declare 語句的參數(shù)表中不能有定長(zhǎng)的字符串;只有變長(zhǎng)的字符串才能傳給過程。定長(zhǎng)的字符串可以作為過程參數(shù)使用,但在傳遞前都要被轉(zhuǎn)換為變長(zhǎng)的字符串。
注意 當(dāng)所調(diào)用的外部過程需要一個(gè)值為 0 的字符串時(shí),就要使用 vbNullString 常數(shù)。該常數(shù)與零長(zhǎng)度字符串 ("") 是不相同的。

TA貢獻(xiàn)1817條經(jīng)驗(yàn) 獲得超6個(gè)贊
Private Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" _
(ByVal uAction As Long, ByVal uParam As Long, ByVal lpvParam As Any, _
ByVal fuWinIni As Long) As Long
里面的 user32.dll 里面都是用C語言編寫的一些函數(shù),只是VB調(diào)用而已

TA貢獻(xiàn)2036條經(jīng)驗(yàn) 獲得超8個(gè)贊
API的意思解釋
允許獲取和設(shè)置數(shù)量眾多的windows系統(tǒng)參數(shù)
Long,非零表示成功,零表示失敗。會(huì)設(shè)置GetLastError
在調(diào)用這個(gè)函數(shù)之前,特別要注意將lpvParam參數(shù)定義成正確的數(shù)據(jù)類型