Declareステートメント
構文1
[Public|Private] Declare Sub|Function name Lib "libname" [Alias "aliasname"] [([arglist])][As type]
キーワードPublicは省略可能です。宣言する参照をプロシージャレベルにします。
キーワードPrivateは省略可能です。宣言する参照をモジュールレベルにします。
キーワードSubは省略可能です。参照するプロシージャが値を返さないことを示します。参照するプロシージャが値を返すときはキーワードFunctionを指定します。
キーワードnameには、任意の有効なプロシージャ名を指定します。
libnameには、プロシージャが含まれるDLLの名前を指定します。
Alias節は省略可能です。プロシージャが別名を持っていることを示します。
引数arglistは省略可能です。プロシージャに渡す引数のリストを指定します。
As typeは省略可能です。参照するプロシージャが値を返すときは、戻り値の方を指定します。
解説
ダイナミックリンクライブラリ(DLL)の外部プロシージャへの参照を宣言します。
Declareステートメントは、モジュールレベルで使用します。
引数nameに指定するプロシージャ名は、大文字と小文字を区別します。
引数arglistは、次の書式で指定します。
[Optional] [ByVal|ByRef] [ParamArray] varname[( )] [As type]
Optinalは省略可能です。指定した引数が省略可能を意味します。
ByValは、その引数が値私で渡されることを今します。
ByRefは、その引数が参照渡しで渡されることを意味します。
ParmArrayは最後に指定する引数に指定できます。その引数が省略可能な配列であることを意味します。
typeは省略可能です。プロシージャに渡す引数のデータ型を指定します。
引数arglistに固定長文字列を指定することはできません。固定長文字列を指定すると、プロシージャに渡される前に可変長文字列に変換されてしまいます。
値0の文字列を渡す場合は、vbNullString定数を使います。値0の文字列と長さ0の文字列("")は異なります。
サンプル
次の例は、Windowsシステムフォルダの全ファイル名を取得する時間をミリ秒単位で計測します。GetTickCountはWindows起動時からの時間をミリ秒で返す関数です。
Declare Function GetTickCount Lib "kernel32" () As Long Sub Sample() Dim buf As String, StartTime As Long, EndTime As Long, cnt StartTime = GetTickCount buf = Dir("C:\Windows\System32\*.*") Do While buf <> "" cnt = cnt + 1 buf = Dir() Loop EndTime = GetTickCount MsgBox cnt & "個のファイル" & vbCrLf & EndTime - StartTime & "ミリ秒" End Sub