外部関数でのパラメータ

任意の型のパラメータを外部関数に渡すことができます。 単純なデータ型を使用することは簡単ですが、配列や構造化データを処理するには、使用する特定のデータ型のサイズや配置に関する知識が必要です。

入力および出力パラメータとして許可される単純なデータ型は、以下のとおりです。
表 1. 単純データ型
C データ型 BDL データ型
Char、unsigned char Number
Short、unsigned short Number
Long Number
Double Float
Float Float
char* String
注: unsigned long データ型は Silk Performer スクリプトで使用されると、long 型に変換されます。

パラメータが関数に値で渡されるときは、型を指定するだけで宣言されます。 パラメータが関数に参照で渡される場合は (出力パラメータとして使用される場合など)、データ型へのポインタを定義する必要があります。

次の例では、関数パラメータを C で宣言する方法と、必要な対応する外部関数を BDL で宣言する方法について説明します。 さらに、外部関数呼び出しの例も示します。

C ソース コード

この例では、外部関数 T_PARAM は、入力パラメータinCharinShortinLonginDoubleinFloatinUShort、および inUChar を受け取ります。 対応する出力パラメータにはそれぞれ、outCharoutShortoutLongoutDoubleoutFloatoutUShort、および 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;
}

BDL 外部関数の宣言

前に定義した 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

BDL 外部関数の呼び出し

次の例では、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;