Page History
...
例 - RDML 作業リストの操作
2 番目の例は、最初に紹介した例の簡単なバリエーションです。
2 番目の例は、最初に紹介した例の簡単なバリエーションです。
これは、UD_AVERAGE_LIST により呼び出され、複数の番号からなる RDML "作業リスト" を引き渡せるようにします。Wiki Markup
このリストの値はすべて集められ、その平均値が算出されます。
このファンクションの一意識別子は 414 です。
必須の引数が 1 つあり、それは、複数の数値からなる作業リストです。
必須の戻り値も 1 つで、これが数値リストの平均値です。
この RDML ファンクションで使用され、平均値を算出するエントリーは 1,000 までサポートされます。 define fieldまでサポートされます。
define field(#number)
...
type(*dec)
...
length(7)
...
def_list name(#list)
...
fields(#number)
...
type(*working)
...
entrys(1000)
...
define field(#mean)
...
type(*dec)
...
length(7)
...
...
use ud_average_
...
list with_arg(#list)
...
to_get(#mean)
...
UD_AVERAGE_LIST
...
を導入するために必要となるユーザー定義組み込み関数のコードは例えば以下のようになります。
/
...
=================================================================
...
*/
/*
...
========== ユーザー定義組み込み関数の定義 =
...
==========...
*/
/*
...
================================================================
...
*/
/* */
/*
...
ソース ファイル : U_BIF414.C */
/*
...
エントリー ポイント名 : U_Builtin_
...
414 */
/*
...
リンク先 DLL 名 : U_BIF414.DLL */
/*
...
共有オブジェクト名 : u_bif414.O */
/*
...
OS/依存性 : Yes/No */
/* */
/*
...
修正履歴 : */
/* */
...
/* タスクID 日付 説明 */
/* =======
...
==== ===========
...
*/
/* */
/*
...
================================================================
...
*/
#define
...
U_BIF_FUNCTION U_Builtin_414
...
#define U_BIF_FUNCTION_
...
NAME "U_Builtin_414"
#define
...
U_BIF_
...
DESCRIPTION "この組み込み関数の説明"
#include
...
<string.h>
#include
...
<stdlib.h>
#include
...
<stdio.h>
...
#include <limits.h>
#include
...
"x_glodef.h"
...
#include "x_glousr.h"
...
#ifdef X_OPERATING_SYSTEM_WIN
#include
...
<windows.h>
#endif
#include
...
"x_funstr.h"
#include
...
"x_funpro.h"
...
#include "x_bif000.h"
/*==================================================================*/
/* */
/*
...
引数 : pX_Ids - 標準 X_IDS システム定義 */
/* pX_Pro - 標準 X_PRO プロセス定義 */
/* pX_Fun - 標準 X_FUN ファンクション定義 */
/* pX_Bif - 標準 X_BIF 組み込み関数定義 */
/* X_Fld[: - 標準 X_FLD フィールド定義 */
/* X_List[: - 標準 X_LIST リスト定義 */
/* sInCount - 引き渡された引数の数 */
/* sInVec[: - 引数のベクター */
/* sRetCount - 戻り値の数 */
/* sRetVec[: - 戻り値のベクター */
/* */
/*==================================================================*/
X_VOID_
...
FUNCTION U_BIF_
...
FUNCTION (
...
U_BIF_STANDARD_
...
PARAMETERS )
...
{
/*
...
-------------------------------------------------------------
...
*/
/*
...
シャットダウン要求の処理 (通常はアクティビティは不要)
...
*/
/*
...
-------------------------------------------------------------
...
*/
if
...
(U_BIF_SHUTDOWN_REQUEST)
...
{
U_BIF_SET_GOOD_RETURN
...
}
/*
...
-------------------------------------------------------------
...
*/
/*
...
それ以外 (ELSE)
...
は要求のアクティビティを実行 */
/*
...
-------------------------------------------------------------
...
*/
else
...
{
U_BIF_DECLARE_LIST_
...
POINTER (pListArg1)
X_SHORT sEntrys =
...
0;
X_
...
LONG lAverage =
...
0;
/*
...
----------------------------------------------
...
*/
/*
...
リスト ポインターを設定し、エントリー数を取得 */
/*
...
----------------------------------------------
...
*/
U_BIF_SET_ARG_LIST_
...
POINTER (pListArg1,
...
0)
U_BIF_GET_LIST_CURRENT_
...
ENTRYS (pListArg1,
...
sEntrys)
/*
...
-------------------------------------
...
*/
/*
...
リストにエントリーが存在する場合 */
/*
...
-------------------------------------
...
*/
...
if (sEntrys > 0)
{
X_SHORT sCurrentEntry;
X_CHAR chFound;
X_LONG lValue;
X_
...
DOUBLE dTotal = 0;
/*
...
--------------------------------------
...
*/
/*
...
リストのエントリーすべてを処理し、 */
/*
...
全エントリー値の平均を算出 */
/*
...
--------------------------------------
...
*/
for
...
(...
sCurrentEntry =
...
1; sCurrentEntry <= sEntrys; sCurrentEntry++)
...
{
U_BIF_GET_ENTRY_FROM_
...
LIST (pListArg1,
...
sCurrentEntry,
...
chFound)
U_BIF_GET_LIST_COLUMN_AS_
...
LONG (pListArg1,
...
0,
...
lValue)
dTotal = dTotal + lValue;
}
lAverage = dTotal / sEntrys;
}
/* -------------------------------------
...
*/
/*
...
結果を値 1 に返す */
/*
...
-------------------------------------
...
*/
U_BIF_SET_RET_FROM_
...
LONG (0,
...
lAverage);
U_BIF_SET_GOOD_RETURN
...
}
/*
...
-------------------------------------------------------------
...
*/
/*
...
コントロールを呼び出し元に返す */
/* -------------------------------------------------------------
...
*/
U_BIF_RETURN;
...
}
この例に関する注意点は以下の通りです。
- 作業リストの操作について。組み込み関数に引き渡された作業リストは、簡単な U_BIF を利用することで、読み込んで更新したり、データを追加、もしくはクリアすることができます。
- 引数や戻り値とは異なり、作業リストのエントリーは、 0 から (N-1) ではなく、1 から N で番号が振られます。