LOTUSSCRIPT 言語
外部 C 関数を呼び出す LotusScript の関数やサブルーチンを宣言して、C ルーチンの共有ライブラリで定義されている関数を呼び出せるようにします。
Declare ステートメント (外部 C 呼び出し) は OS/2 ではサポートされません。
構文Declare [ Public | Private ] { Function | Sub } LSname Lib libName [ Alias aliasName ] ( [ argList ] ) [ As returnType ] 構成要素Public | Private
既定では、C 関数の宣言は Private です。
このステートメントで (キーワード Function を使って) Function を宣言しているときは、LSname にデータ型の接尾辞を追加して関数の戻り値の型を宣言できます。
argList の構文は次のとおりです。
argument [, argument ] ...
この場合、argument は次の構文になります。
[ ByVal ] name As [ LMBCS | Unicode ] [ dataType | Any ]
省略できる LMBCS キーワードと Unicode キーワードは、String データ型にしか使えません。この 2 つのキーワードは、文字セットを指定します。次の使い方と例を参照してください。
キーワード Any を使うと、データ型を指定しなくても C 関数に引数を渡せます。型は調べられません。
関数の場合は、As returnType を指定するか、LSname にデータ型の接尾辞を追加して、関数の戻り値のデータ型を宣言します。returnType とデータ型の接尾辞は、一方しか指定できません。
returnType として Any を使うことはできません。
returnType として Variant 型、Currency 型、または固定長の String 型を使うことはできません。
As returnType を省略し、関数名にデータ型の接尾辞を追加しないときは、関数名に適用される Deftype ステートメントで指定されたデータ型の値が返されます。C 関数は Variant 型を返せないので、DefVar ステートメントを関数名に適用することはできません。
returnType の構文は次のとおりです。
[ LMBCS | Unicode ] dataType
dataType は、C 関数の戻り値の型と正確に一致していなければなりません。戻り値の型変換は行われません。
「_」は、Lotus Notes 固有の DLL 用に予約されています。これは、Lotus Notes R4.5.1 で行われた変更です。Lotus 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 では別名がそのまま残ります)。
例 関連項目