Declare ステートメント (外部 C 呼び出し) (LotusScript 言語)

外部 C 関数を呼び出す LotusScript® の関数やサブルーチンを宣言して、C ルーチンの共有ライブラリで定義されている関数を呼び出せるようにします。

Declare ステートメント (外部 C 呼び出し) は OS/2 ではサポートされません。

構文

Declare [ Public | Private ] { Function | Sub } LSname Lib libName [ Alias aliasName ] ( [ argList ] ) [ As returnType ]

要素

Public | Private

オプション。Public は、そのモジュールがロードされている限り、宣言された C 関数が別のモジュールから参照できることを示します。Private は、C 関数の宣言がこのモジュール内でしか利用できないことを示します。

既定では、C 関数の宣言は Private です。

Function | Sub

C 関数を関数として呼び出すか、サブルーチンとして呼び出すかを指定します。

LSname

LotusScript 内で使用される関数またはサブルーチンの名前です。Alias 節を省略した場合は、この名前が共有ライブラリ内で宣言された名前と一致しなければなりません。

このステートメントで (キーワード Function を使用して) Function を宣言しているときは、LSname にデータ型の接尾辞を追加して関数の戻り値の型を宣言できます。

libName

共有ライブラリのファイル名を指定するリテラル文字列または文字列定数です。拡張子は省略できます。必要に応じて、完全パスを指定できます。libName は自動的に大文字に変換されます。大文字と小文字を区別するときは、次に説明する aliasName を使用します。

aliasName

オプション。次のどちらかを含むリテラル文字列です。

この引数は、C 関数の名前が LotusScript の名前に合わない場合、または 32 ビット Windows 内でエクスポートされるライブラリ関数を呼び出す場合などで大文字と小文字を区別するときに便利です。

argList

オプション。外部関数のための引数のリストです。C 関数が引数をとらない場合でも、リストをカッコで囲む必要があります。

argList の構文は次のとおりです。

argument [, argument ] ...

この場合、argument は次の構文になります。

[ ByVal ] name As [ LMBCS | Unicode ] [ dataType | Any ]

省略できる LMBCS キーワードと Unicode キーワードは、String データ型にしか使用できません。この 2 つのキーワードは、文字セットを指定します。次の使用法と例を参照してください。

キーワード Any を使用すると、データ型を指定しなくても C 関数に引数を渡すことができます。型は調べられません。

returnType

関数の戻り値の型です。サブルーチンは値を返さないため、サブルーチンには As returnType 節が使用できません。

関数の場合は、As returnType を指定するか、LSname にデータ型の接尾辞を追加して、関数の戻り値のデータ型を宣言します。returnType とデータ型の接尾辞は、一方しか指定できません。

returnType として Any を使用することはできません。

returnType として Variant 型、Currency 型、または固定長の String 型を使用することはできません。

As returnType を省略し、関数名にデータ型の接尾辞を追加しないときは、関数名に適用される Deftype ステートメントで指定されたデータ型の値が返されます。C 関数は Variant 型を返せないため、DefVar ステートメントを関数名に適用することはできません。

returnType の構文は次のとおりです。

[ LMBCS | Unicode ] dataType

dataType は、C 関数の戻り値の型と正確に一致していなければなりません。戻り値の型変換は行われません。

省略できる LMBCS キーワードと Unicode キーワードは、String データ型にしか使用できません。この 2 つのキーワードは、文字セットを指定します。次の使用法と例を参照してください。

使用法

Public キーワードは、クラスのメンバを宣言するときを除いて、アプリケーションオブジェクトのスクリプトに直接記述したり、アプリケーションオブジェクトスクリプトの %Include ファイル内で使用することはできません。Public 宣言は (Globals) で使用してください。

外部関数の宣言は、モジュールレベルでのみ行えます。関数に戻り値のデータ型またはデータ型の接尾辞がないときは、エラーとなります。

「_」は、Notes 固有の DLL 用に予約されています。これは、Notes R4.5.1 で行われた変更です。Notes R4.5.1 以降で LotusScript を使用して DLL をロードしようとする場合に、DLL 名の前に下線が付いていると、「DLL 読み込み時のエラーです。」というエラーを受け取ります。

引数を渡す

既定では、引数は参照渡しで外部関数に渡されます。ByVal キーワードを使用して、引数を値で渡すこともできます。ただし、LotusScript が値を対応する C 関数の引数のデータ型に変換できるときに限ります。

配列、型変数、ユーザー定義オブジェクトは、参照渡ししなければなりません。

リストを引数として C 関数に渡すことはできません。

固定長の String 型を引数として渡すことはできません。

製品オブジェクトは、参照渡し (参照をインスタンスハンドルに渡す)、または値渡し (インスタンスハンドルそのものを渡す) できます。値渡しするには、キーワード ByVal を使用しなければなりません。実際の引数にカッコは使用できません。

Any 型は、引数のデータ型の制限を防げます。Any 型の引数は、内容に関係なく常に参照渡しです。Any 型として宣言されている C 関数の引数には、配列やリストを含む Variant 型を渡すことができます。

LMBCS または Unicode 文字列を使用する

オプションキーワードの LMBCS と Unicode を String 型の argument または returnType と一緒に使用すると、文字セットを指定できます。

Unicode は、プラットフォーム固有のバイト順を使用して 2 バイト文字 (単語) を指定します。

LMBCS は、LMBCS 最適化グループ 1 の文字列 (複数バイト文字) を指定します。

LMBCS も Unicode も指定しない場合、文字列変数にはプラットフォーム固有の文字セットが使用されます。

32 ビット版 Windows で提供されているライブラリ関数の呼び出し

32 ビット版 Windows を使用している場合は、提供されているライブラリの関数名では大文字と小文字が区別されますが、LotusScript の Declare ステートメントでは自動的に大文字に変換されてしまいます。提供されているライブラリの関数を正しく呼び出すには、Alias 節を使用して大文字と小文字を正確に区別して関数名を指定します (LotusScript では別名がそのまま残ります)。