連携 Declareステートメント外部プロシージャへの参照を宣言

※より実装に近く表示させる為、コードの改行を避けています。スマホ等で閲覧される際は向きを変えてご覧ください。

※実装するバージョンによってはバージョンアップの仕様により動作しないコードもあります。実装には動作確認の上ご使用下さい。

'**********************************
'Declare ステートメントの使用例
'**********************************
'Declare ステートメントを標準モジュールのモジュールレベルにて使用。
'DLLに納められている外部プロシージャへの参照を宣言。
'Declare ステートメントがPrivate であれば、Declare ステートメントをクラス モジュールに記述できます。

'16ビット版 Microsoft Windows の場合
Declare Sub MessageBeep Lib "User" (ByVal N As Integer)

'SomeBeep をプロシージャ名に対するエイリアスと見なします。
Declare Sub MessageBeep Lib "User" Alias "SomeBeep" (ByVal N As Integer)

'Alias 句で序数を使って、GetWinFlags を呼び出します。
Declare Function GetWinFlags Lib "Kernel" Alias "#132" () As Long

'32ビット版 Microsoft Windows ではUSER32.DLL ライブラリを指定
'16ビット版 Microsoft Windows ではUSER.DLL ライブラリを指定
'16ビット版または32ビット版Windowsのいずれかで実行できるコードを記述。
#If Win32 Then
    Declare Sub MessageBeep Lib "User32" (ByVal N As Long)
#Else
    Declare Sub MessageBeep Lib "User" (ByVal N As Integer)
#End If
Declare ステートメント(ヘルプ抜粋)
ダイナミック リンク ライブラリ (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 省略可
  • モジュール内のすべてのプロシージャから参照できるプロシージャを宣言するときに指定します
Private 省略可
  • 宣言が行われたモジュール内でのみ参照できるプロシージャを宣言するときに指定します
Sub 省略可
  • ただし、Sub を省略する場合には、Function を指定する必要があります
  • プロシージャが値を返さないことを示します
Function 省略可
  • ただし、Function を省略する場合には、Sub を指定する必要があります
  • プロシージャが値を返し、式の中で使えることを示します
name 必須
  • 任意の有効なプロシージャ名を指定します
  • DLL のエントリ ポイントは大文字小文字を区別して指定することに注意してください
Lib 必須
  • 宣言するプロシージャが DLL またはコード リソースに含まれていることを示します
  • Lib 節は、すべての宣言で必要です
libname 必須
  • 宣言するプロシージャが含まれている DLL またはコード リソースの名前を指定します
Alias 省略可
  • 呼び出すプロシージャが、DLL の中で別の名前を持っていることを示します
  • 外部プロシージャの名前が Visual Basic のキーワードと同じ場合に役に立ちます
  • DLL プロシージャの名前が、パブリック変数、パブリック定数、または適用範囲内のほかのプロシージャの名前と同じ場合でも、Alias を使えます
  • また、Alias は、DLL の名前付け規則に合っていない文字が DLL プロシージャ名に含まれている場合にも使えます
aliasname 省略可
  • DLL またはコード リソース内のプロシージャの名前を指定します
  • 先頭の文字がシャープ記号 (#) でない場合、引数 aliasname には DLL 内で定義されているプロシージャのエントリ ポイント名を指定します
  • 先頭の文字がシャープ記号 (#) の場合は、2 文字目以降の文字にはプロシージャのエントリ ポイントの序数を指定します
arglist 省略可
  • プロシージャを呼び出すときに、プロシージャに渡す引数を表す変数のリストを指定します
type 省略可
  • Function プロシージャの戻り値のデータ型を指定します
  • バイト型 (Byte)、ブール型 (Boolean)、整数型 (Integer)、長整数型 (Long)、通貨型 (Currency)、単精度浮動小数点数型 (Single)、倍精度浮動小数点数 (Double)、10 進型 (Decimal) (現在はサポートされていません)、日付型 (Date)、文字列型 (String) (可変長のみ)、バリアント型 (Variant)、ユーザー定義型、オブジェクト型のいずれかを指定できます
引数 arglist
[Optional] [ByVal | ByRef] [ParamArray] varname[( )] [As type]
指定項目 省略 内容
Optional 省略可
  • 指定した引数が省略可能であることを示します
  • これを指定した場合は、引数 arglist 内のこれ以降の引数も省略可能でなければならず、すべてキーワード Optional を付けて宣言する必要があります
  • キーワード ParamArray を使う場合は、どの引数に対してもキーワード Optional は指定できません
ByVal 省略可
  • その引数が、値渡しで渡されることを示します
ByRef -
  • その引数が、参照渡しで渡されることを示します
  • Visual Basic では、既定値はキーワード ByRef です
ParamArray 省略可
  • 引数 arglist の最後に指定する引数としてのみ指定でき、その引数がバリアント型の要素を持つ省略可能 (Optional) な配列であることを示します
  • キーワード ParamArray を使うと、任意の数の引数を渡すことができます
  • キーワード ParamArray は、ByVal、ByRef、Optional の各キーワードと共に使うことはできません
varname 必須
  • プロシージャに渡す引数を表す変数の名前を指定します
  • 変数の標準的な名前付け規則に従って指定します
( ) 条件
  • 配列変数に対しては、必ず指定します
  • 引数 varname が配列であることを示します
type 省略可
  • プロシージャに渡す要素のデータ型を指定します
  • バイト型 (Byte)、ブール型 (Boolean)、整数型 (Integer)、長整数型 (Long)、通貨型 (Currency)、単精度浮動小数点数型 (Single)、倍精度浮動小数点数型 (Double)、10 進型 (Decimal) (現在はサポートされていません)、日付型 (Date)、文字列型 (String) (可変長のみ)、オブジェクト型 (Object)、バリアント型 (Variant)、ユーザー定義型、オブジェクト型のいずれかを指定できます
解説
Function プロシージャでは、プロシージャのデータ型が戻り値のデータ型になります。関数の戻り値のデータ型は、引数 arglist の後の As 節で指定します。引数 arglist 内では、As 節を使ってプロシージャに渡す引数のデータ型を指定できます。さらに、引数 arglist 内では、標準のデータ型以外に As Any も指定できます。Any を指定すると、データ型のチェックを抑止し、任意のデータ型をプロシージャに渡せます。
空のかっこは、Sub プロシージャまたは Function プロシージャに引数がないことを示し、プロシージャには何も渡されません。次の例では、Sub プロシージャ First には引数がありません。引数を指定して First を呼び出すと、エラーが発生します。
Declare Sub First Lib "MyLib" ()
引数リストを指定すると、プロシージャが呼び出されるたびに引数の個数とデータ型がチェックされます。次の例では、Sub プロシージャ First は長整数型 (Long) の引数を 1 つ受け取ります。
Declare Sub First Lib "MyLib" (X As Long)
メモ
  • Declare ステートメントの引数リストに固定長文字列を指定することはできません。プロシージャに渡せるのは可変長文字列だけです。プロシージャの引数として固定長文字列を指定すること自体は可能ですが、その固定長文字列は、プロシージャに渡される前に可変長文字列に変換されます。
  • 値が 0 の文字列を必要とする外部プロシージャを呼び出す場合は、定数 vbNullString を使います。値が 0 の文字列は、長さ 0 の文字列 (") とは異なります。

Declare ステートメントの使用例

次の例は、Declare ステートメントを標準モジュールのモジュール レベルで使って、ダイナミック リンク ライブラリ (DLL) に納められている外部プロシージャへの参照を宣言する方法を示しています。Declare ステートメントがプライベート (Private) であれば、Declare ステートメントをクラス モジュールに記述できます。
16 ビット版 Microsoft Windows の場合
Declare Sub MessageBeep Lib "User" (ByVal N As Integer)
' SomeBeep をプロシージャ名に対するエイリアスと見なします。

Declare Sub MessageBeep Lib "User" Alias "SomeBeep" (ByVal N As Integer)
' Alias 句で序数を使って、GetWinFlags を呼び出します。
Declare Function GetWinFlags Lib "Kernel" Alias "#132" () As Long
32 ビット版 Microsoft Windowsの場合
' 32 ビット版 Microsoft Windows では、USER.DLL ライブラリではなく、
' USER32.DLL ライブラリを指定します。条件付きコンパイルを使えば、
' 16 ビット版または 32 ビット版 Windows のいずれかで実行できるコードを、
' 記述できます。
#If Win32 Then
    Declare Sub MessageBeep Lib "User32" (ByVal N As Long)
#Else
    Declare Sub MessageBeep Lib "User" (ByVal N As Integer)
#End If

 

 

 

2000年01月01日|[VBサンプルコード]:[連携]