Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migration of unmigrated content due to installation of a new plugin

[ Image Added |../../index.htm#lansa/dsnbi_0230.htm]
現在地:

Anchor
DSNBI_0230
DSNBI_0230
Anchor
_Toc130909889
_Toc130909889
例 - 簡単な平均化関数

組み込み関数を 3GL プログラムとして定義
このセクションでは、組み込み関数をプログラムとして作成する際の手順を説明します。以下に示されているサンプルは非常に簡素なものですが、LANSA で組み込み関数がどのように利用されるのかの概要が理解できると思います。 
シナリオ:これはユーザー定義の組み込み関数です。この組み込み関数を使って、システム値を取得します。
簡素な C プログラムです。このプログラムは、システム値の名前を渡し、システム値が返されます。
この名前は UD_AVERAGE です。
このサイトで次に利用可能な識別子は 413 です。
この組み込み関数は、 LANSA RDML 言語では以下のようにアクセスすることが可能です。
  define field(#number1) type(*dec) length(7)                   define field(#number2) type(*dec) length(7)                   define field(#mean) type(*dec) length(7)                                                                                    request fields(#number1 #number2)                             use  ud_average with_arg(#number1 #number2) to_get(#mean)     pop_up  fields(#mean)                                      
次は、UD_AVERAGE という名前の C のユーザー定義組み込み関数で、引数として、2 つの 10 進数を受け取り、その平均値を返します。
引数と返り値はすべて必須の値です。
この組み込み関数は平凡なもので、これを利用することもないかもしれませんが、まずは簡単な取り掛かりとして紹介します。
BIF 定義 (IBM i は DC@F47 ファイル/Windows は LX_F47 ファイル)

...

  • C マクロの多用について。U_BIF_xxxx 参照のすべてはヘッダーファイル(.H)  X_BIF000.H に含まれているマクロへの参照です。 これらのマクロはコンパイル時に C コードに展開されます。可能なかぎり、組み込み関数と Visual LANSA 定義の間の"インターフェース"、もしくは呼び出しのインターフェースとして、これらのマクロを利用するようにしてください。こうすことで、将来変更があったとしても、アプリケーションを守ることができます。 U_BIF マクロは多数用意されています。全マクロの一覧は「提供の マクロは多数用意されています。全マクロの一覧は「提供の U_BIF マクロ」を参照してください。マクロ」を参照してください。
  • タイプ (例: X_LONG) を使ったローカル変数の定義について。この定義は標準のヘッダー・ファイル X_GLODEF.H に含まれており、Visual LANSA から提供されます。U_BIF に渡される変数は、必ず (マクロ定義に示された) これらのタイプを使って宣言する必要があります。

    変数宣言

    ポインター宣言

    関係する実際の C タイプ

    X_VOID

    X_PVOID

    Void

    X_BOOL

    X_PBOOL

    Int

    X_SHORT

    X_PSHORT

    Short

    X_USHORT

    X_PUSHORT

    符号なし short

    X_LONG

    X_PLONG

    Long

    X_ULONG

    X_PULONG

    符号なしd long

    X_LONGLONG

    X_PLONGLONG

    LONGLONG (Windows): 64 ビット 符号付き整数WATCOMC との使用は推奨されません。

    X_DOUBLE

    X_PDOUBLE

    double

    X_CHAR

    X_PCHAR

    char (1 文字のみ)

    X_VCHAR

    X_PVCHAR

    char ( > NULL/文字列終端を伴う 1 つの文字)

    X_LIST_COUNT

    X_LIST_COUNT *

    Long

     
  • C の番号の設定規則の使用について。慣例では、多くの C オブジェクトはオフセット ("N" 個のものについては 0 から N-1) により番号が振られています。 この規則がすべての U_BIF マクロにも使われています。ですから、"引数の番号 3" というのは、実際は U_BIF マクロ内では番号 2 として参照されています。 一般的にこのアプローチにより、コーディングしやすくなります。例えば、このファンクションをよりジェネリックなものにして、2 から 20 までの番号を引数として受け取るようにします (0 で除算するテストが不要)。これを行うためには、ファンクションのボディを次のように変更する必要があります。

    { 
     X_LONG lArgValue; 
     X_SHORT sTotalArgs; 
     X_SHORT sCurrentArg; 
     X_DOUBLE dTotal = 0;
 
     U_BIF_GET_ARGUMENT_COUNT (sTotalArgs)
 
     for (sCurrentArg = 0; sCurrentArg < sTotalArgs; sCurrentArg++) 
     { 
        U_BIF_GET_ARG_AS_LONG (sCurrentArg, lArgValue) 
        dTotal = dTotal + lArgValue; 
     }
     lAverage = dTotal / sTotalArgs;
 
     U_BIF_SET_RET_FROM_LONG (0, lAverage)
 
     U_BIF_SET_GOOD_RETURN 
    }
[ Image Added |../../index.htm#lansa/dsnbi_0230.htm]