任意の型のパラメータを外部関数に渡すことができます。 単純なデータ型を使用することは簡単ですが、配列や構造化データを処理するには、使用する特定のデータ型のサイズや配置に関する知識が必要です。
| C データ型 | BDL データ型 |
|---|---|
| Char、unsigned char | Number |
| Short、unsigned short | Number |
| Long | Number |
| Double | Float |
| Float | Float |
| char* | String |
パラメータが関数に値で渡されるときは、型を指定するだけで宣言されます。 パラメータが関数に参照で渡される場合は (出力パラメータとして使用される場合など)、データ型へのポインタを定義する必要があります。
次の例では、関数パラメータを C で宣言する方法と、必要な対応する外部関数を BDL で宣言する方法について説明します。 さらに、外部関数呼び出しの例も示します。
この例では、外部関数 T_PARAM は、入力パラメータinChar、inShort、inLong、inDouble、inFloat、inUShort、および inUChar を受け取ります。 対応する出力パラメータにはそれぞれ、outChar、outShort、outLong、outDouble、outFloat、outUShort、および outUChar があります。 これらのパラメータはポインタとして宣言する必要があります。関数が呼び出しする間に変数への参照が関数に渡されるからです。 さらに、inoutString 文字列は入出力パラメータとして宣言されます。
char* T_PARAM( char inChar, // in
short inShort,
long inLong,
double inDouble,
float inFloat,
unsigned short inUShort,
unsigned char inUChar,
char* inoutString, // in/out
char* outChar, // out
short* outShort,
long* outLong,
double* outDouble,
float* outFloat,
unsigned short* outUShort,
unsigned char* outUChar )
{
char sBuffer[1000];
// copy the values of the input parameters to the
// output parameters and the return value
return sBuffer;
}
前に定義した T_PARAM 関数を BDL で使用するには、Silk Performer スクリプトの外部関数セクションで関数を宣言する必要があります。 次の例で説明します。 この場合、パラメータは正式データ型として定義されます。 各パラメータについているコメントは対応する BDL データ型を示します。
"T_PARAM" function t_param( in char, // in number in short, // in number in long, // in number in double, // in float in float, // in float in unsigned short, // in number in unsigned char, // in number inout string, // inout string out char, // out number out short, // out number out long, // out number out double, // out float out float, // out float out unsigned short, // out number out unsigned char): string(100); // out number
次の例では、T_PARAM 関数を呼び出す方法について説明します。 この例では、ランダム値が変数に割り当てられ、入力パラメータとして関数に渡されます。
dcltrans
transaction TMain
var
n1, n2, n3, n4, n5, n6, n7, n8, n9, n10 : number;
f1, f2, f3, f4 : float;
s1, sRet : string;
begin
n1 := 127; n2 := 32000; n3 := 2000000;
n4 := 64000; n5 := 255;
f1 := 12345.12345; f2 := 12.99;
s1 := "Teststring";
sRet := t_param(n1, n2, n3, f1, f2, n4, n5, s1,
n6, n7, n8, f3, f4, n9, n10);
end TMain;