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 関数の戻り値の型と正確に一致していなければなりません。戻り値の型変換は行われません。
Public キーワードは、クラスのメンバを宣言するときを除いて、アプリケーションオブジェクトのスクリプトに直接記述したり、アプリケーションオブジェクトスクリプトの %Include ファイル内で使用することはできません。Public 宣言は (Globals) で使用してください。
外部関数の宣言は、モジュールレベルでのみ行えます。関数に戻り値のデータ型またはデータ型の接尾辞がないときは、エラーとなります。
「_」は、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 では別名がそのまま残ります)。
例 関連項目