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

VB&VBA
FROG ふろっぐ
 
  • オプション

    本文印刷

    お気に入りに追加

  • 検索

    Googlewwwjp-ia
     

    Googlewwwjp-ia
     
  • 情報

  • 関連

[VB&VBA][連携 Declareステートメント外部プロシージャへの参照を宣言]
  1. Declare ステートメント
    1. ダイナミック リンク ライブラリ (DLL)
    2. プロシージャ
    3. モジュール レベル
    4. 構文 1
    5. 構文 2
    6. 構成
    7. 引数 arglist
    8. 解説
    9. メモ
    10. メモ
    11. Declare ステートメントの使用例
      1. 16 ビット版 Microsoft Windows の場合
      2. 32 ビット版 Microsoft Windowsの場合

Declare ステートメント

ダイナミック リンク ライブラリ (DLL)の外部プロシージャへの参照を宣言します。モジュール レベルで使います。
ダイナミック リンク ライブラリ (DLL)

実行時に読み込まれて、アプリケーションにリンクされるルーチンで構成されるライブラリ ファイル。DLL は、C、MASM、FORTRAN などの言語で作成されます。

プロシージャ

実行時に 1 つの単位として処理されるコードの集まり。プロシージャには、Function プロシージャ、Property プロシージャ、Sub プロシージャの 3 種類があります。通常、プロシージャの名前は、モジュール レベルで定義します。実行可能なコードは、すべてプロシージャに含める必要があります。プロシージャを他のプロシージャ内にネストすることはできません。

モジュール レベル

フォーム モジュールおよびコード モジュールの宣言セクション。つまり、プロシージャに含まれないコードです。モジュール レベルに対して、プロシージャに含まれる部分をプロシージャ レベルと呼びます。

構文 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

引数 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 を呼び出すと、エラーが発生します。
Option Explicit

Declare Sub First Lib "MyLib" ()

引数リストを指定すると、プロシージャが呼び出されるたびに引数の個数とデータ型がチェックされます。次の例では、Sub プロシージャ First は長整数型 (Long) の引数を 1 つ受け取ります。
Option Explicit

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





Production Japan Import Application. Since 1998