CALL [INTERFACE4 ] operand1 [[USING ] operand2 ...128]
|
このドキュメントでは、次のトピックについて説明します。
構文図で使用されている記号については、「構文記号」を参照してください。
関連ステートメント:CALL
FILE
| CALL
LOOP
| CALLNAT
| DEFINE SUBROUTINE
| ESCAPE
| FETCH
| PERFORM
関連機能グループ:プログラムおよびルーチンの呼び出し
CALL
ステートメントは、Natural プログラムから他の標準プログラミング言語で書かれた外部プログラムまたは関数を呼び出し、CALL
ステートメントの次のステートメントに戻します。
呼び出される側のプログラムまたは関数は、標準 CALL
インターフェイスをサポートするプログラミング言語で書くことができます。1 つ以上の外部プログラムまたは関数を呼び出すために、複数の CALL
ステートメントを指定できます。
オペランド定義テーブル:
オペランド | 構文要素 | フォーマット | オペランド参照 | ダイナミック定義 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
operand1 |
C | S | A | ○ | × | |||||||||||||||
operand2 |
C | S | A | G | A | U | N | P | I | F | B | D | T | L | C | G | ○ | ○ |
構文要素の説明:
構文要素 | 説明 |
---|---|
INTERFACE4 |
インターフェイスの使用: オプションのキーワード INTERFACE4 は、外部プログラムのコールに使用するインターフェイスのタイプを指定します。下記の INTERFACE4 を参照してください。
|
operand1 |
呼び出される関数の名前:
呼び出される関数の名前( |
[USING]
operand2 |
渡されるパラメータ:
グループ名を使用した場合、そのグループは個々のフィールドに変換されます。つまり、ユーザーがグループの開始アドレスを指定したい場合、グループの最初のフィールドを指定する必要があります。 注意: |
呼び出された関数のコンディションコードは、Natural システム関数 RET
(リターンコード関数)で取得できます。
... RESET #RETURN(B4) CALL 'PROG1' IF RET ('PROG1') > #RETURN WRITE 'ERROR OCCURRED IN PROGRAM1' END-IF ...
ユーザー出口は、外部関数を使用できるようにするため、および Natural では使用できないオペレーティングシステムインターフェイスへのアクセスに必要です。
ユーザー出口は、ダイナミックにリンクされる共有ライブラリ内、または Natural ニュークリアスにスタティックにリンクされるライブラリ内に配置できます。
注意:CALL
ステートメントでユーザー出口を使用する場合、[Local
Configuration File]の[Installation Assignments]で[User-defined libraries]を設定する必要があります。詳細については、『コンフィグレーションユーティリティ』ドキュメントの「コンフィグレーションファイルのパラメータの概要」の「ローカルコンフィグレーションファイル」にある「インストール指定」を参照してください。
共有ライブラリ内に配置した場合は、ユーザー出口が変更されても Natural を再リンクする必要はありません。したがって、ユーザー出口の開発とテストがより簡単になります。この機能は、共有ライブラリをサポートしているすべてのオペレーティングシステムの環境で使用できます。すべてのオペレーティングシステムの環境では、ユーザー出口を Natural ニュークリアスにリンクされたライブラリ内に配置できます。つまり、ユーザー出口を、Natural のリンク済みオブジェクト natraw.o にスタティックにリンクすることが可能です。
ユーザー出口は、3 段階の手順で Natural に追加されます。
Natural が CALL
ステートメントで呼び出された関数の名前を関数のアドレスに関連付けられるように、ジャンプテーブルを作成する必要があります。
ジャンプテーブルに挿入された関数は、必ず書き込むようにしてください。
ダイナミックリンクの場合は、ユーザー出口を含む共有ライブラリを再構築する必要があります。スタティックリンクの場合は、ジャンプテーブルと外部関数をリンク済みの Natural ニュークリアスと一緒にリンクして、外部関数をサポートする実行可能な Natural ニュークリアスを生成します。
以下では次のトピックについて説明します。
ジャンプテーブルのサンプル jumptab.c は、次のディレクトリにあります。
<install-dir>/natural/samples/sysexuex
各関数には 3 つのパラメータがあり、long 型整数を返します。関数プロトタイプは次のようになります。
NATFCT myadd (nparm, parmptr, parmdec) WORD nparm; BYTE **parmptr; FINFO *parmdec;
nparm |
転送するオペランド(オペランド 2)の総数が格納される 16 ビット unsigned short 型整数。 |
parmptr |
転送するオペランドを指すポインタの配列。 |
parmdec |
転送する各オペランドのフィールド情報の配列。 |
データタイプ FINFO は、次のように定義されます。
typedef struct { unsigned char TypeVar; /* type of variable */ unsigned char pb2; /* if type == ('D', 'N', 'P' or 'T') ==> */ /* total num of digits */ /* else */ union { /* unused */ unsigned char pb[2]; /* if type == ('D', 'N', 'P' or 'T') ==> */ unsigned short lfield; /* pb[0] = #dig before.dec.point */ } flen; /* pb[1] = #dig after.dec.point */ /* else */ /* lfield = length of field */ } FINFO;
次に、外部関数を含むモジュールを書き込む必要があります。サンプル関数 mycadd.c は、次のディレクトリにあります。
<install-dir>/natural/samples/sysexuex
サンプルプログラムにインクルードされるファイル natuser.h は、Natural とともに提供されます。このファイルにはデータタイプが BYTE、WORD、および FINFO の構造体の宣言、つまり引き渡される各パラメータの内部表現の宣言が含まれています。
ダイナミックにリンクされるユーザー出口の場合は、ユーザー出口を含む共有ライブラリを再構築する必要があります。
スタティックにリンクされるユーザー出口の場合は、Natural ニュークリアスを再リンクする必要があります。
このような再構築または再リンクでは、Software AG で提供されているサンプルのメイクファイルを使用することをお勧めします。このメイクファイルには、コンパイラおよびリンカに必要なパラメータがすでに含まれています。サンプルのメイクファイルは、次のディレクトリにあります。
<install-dir>/natural/samples/sysexuex
詳細については、この後にあるセクションおよびメイクファイル自体に記載されている説明を参照してください。
<install-dir>/natural/samples/sysexuex に含まれているサンプルディレクトリから、次のファイルを作業ディレクトリにコピーします。
Makedyn
jumptab.c
ncuxinit.c
ユーザー出口が含まれる C ソースファイルを、同じ作業ディレクトリにコピーします。
ファイル jumptab.c を編集して、ユーザー出口の名前および関数ポインタを含めます。このためには、セクション 2 にユーザー出口の外部宣言を追加し、セクション 3 にユーザー出口の名前と関数ポインタのペアを追加します。
メイクファイルを次のように編集します。
ユーザー出口を含むオブジェクトファイルの名前を次の行で指定します。
USEROBJS =
構築する共有ライブラリの名前を、次の行で指定します。
USERLIB =
専用のヘッダーファイルを含める必要がある場合は、それらのファイルが含まれるディレクトリを次の行で指定します。
INCDIR =
不要なファイルをすべて削除するには、次のコマンドを発行します。
make -f Makedyn clean
共有ライブラリをコンパイルしてリンクするには、次のコマンドを発行します。
make -f Makedyn lib
使用する共有ライブラリに、環境変数 NATUSER
を設定します。例えば、次のようになります。
setenv NATUSER install-dir/bin/library-name
共有ライブラリの完全修飾パス名を指定する必要があります。
複数のパスを指定する場合は、UNIX PATH
変数と同様に、パスをコロン(:)で区切ります。
注意:
ライブラリは、それらが NATUSER
で指定されている順序で検索されます。したがって、2 つのライブラリに同じ名前の関数が含まれていると、Natural は、常に NATUSER
で先に指定されているライブラリの関数を呼び出します。
<install-dir>/natural/samples/sysexuex にあるサンプルのユーザー出口関数を参照してください。
<install-dir>/natural/samples/sysexuex に含まれているサンプルディレクトリから、次のファイルを作業ディレクトリにコピーします。
Makefile
jumptab.c
ユーザー出口が含まれる C ソースファイルを、同じ作業ディレクトリにコピーします。
ファイル jumptab.c を編集して、ユーザー出口の名前および関数ポインタを含めます。このためには、セクション 2 にユーザー出口の外部宣言を追加し、セクション 3 にユーザー出口の名前と関数ポインタのペアを追加します。
メイクファイルを次のように編集します。
ユーザー出口を含むオブジェクトファイルの名前を次の行で指定します。
USEROBJS =
専用のヘッダーファイルを含める必要がある場合は、それらのファイルが含まれるディレクトリを次の行で指定します。
INCDIR =
処理オプションのより詳細な情報が必要な場合は、コマンド make
を発行してください。
<install-dir>/natural/samples/sysexuex にあるサンプルのユーザー出口関数を参照してください。
コンパイルとリンクが正常に完了すると、Natural プログラムから外部プログラムを呼び出すことができるようになります。対応する Natural プログラムの例は、ライブラリ SYSEXUEX
にあります。
INTERFACE4
キーワードでは、外部プログラムのコールに使用するインターフェイスのタイプを指定します。このキーワードはオプションです。このキーワードを指定する場合は、インターフェイスを INTERFACE4
として定義し、外部プログラムのコールに使用します。
次の表に、INTERFACE4
を使用した場合と、INTERFACE4
使用しなかった場合の CALL
ステートメントの違いを示します。
キーワード INTERFACE4 を使用しない CALL ステートメント | キーワード INTERFACE4 を使用する CALL ステートメント | |
---|---|---|
使用可能なパラメータ数 | 128 | 32767 |
1 つのパラメータの最大データサイズ | 65535 | 1 GB |
配列情報の取得 | × | ○ |
ラージオペランドとダイナミックオペランドのサポート | × | ○ |
API 経由でのパラメータアクセス | × | ○ |
以下では次のトピックについて説明します。
外部 3GL プログラムのインターフェイスは、Natural の CALL
ステートメントで INTERFACE4
を指定するときに、次のように定義します。
NATFCT functionname (numparm, parmhandle, traditional)
USR_WORD |
numparm; |
転送するオペランド(operand2 )の総数が格納される 16 ビット unsigned short 型整数。
|
void |
*parmhandle; |
構造体を渡すパラメータへのポインタ。 |
void |
*traditional; |
インターフェイスタイプのチェックに使用します(NULL ポインタでない場合は通常の CALL インターフェイス)。
|
INTERFACE4
のオペランド構造体の名前は、parameter_description
で次のように定義します。構造体は、ヘッダーファイル natuser.h とともに提供されます。
struct
parameter_description |
|||
void * |
address |
パラメータデータのアドレス。不整列。realloc() および free() は使用できません。
|
|
int |
format |
Natural データフォーマット:NCXR_TYPE_ALPHA 、など(natuser.h)。
|
|
int |
length |
長さ(小数点以上、該当する場合)。 | |
int |
precision |
小数点以下の長さ(該当する場合)。 | |
int |
byte_length |
dimensions の整数値のバイト単位のフィールドの長さ(0 ~ IF4_MAX_DIM )。
|
|
int |
dimensions |
次元の数(0 ~ IF4_MAX_DIM )。
|
|
int |
length_all |
配列のデータ長の合計(バイト単位)。 | |
int |
flags |
ビットごとに OR 操作で結合したフラグビットは次のとおりです。
|
|
IF4_FLG_PROTECTED :
|
パラメータは書き込み保護されています。 | ||
IF4_FLG_DYNAMIC :
|
パラメータはダイナミック変数です。 | ||
IF4_FLG_NOT_CONTIGUOUS :
|
配列の要素が隣接していません(要素間に空白があります)。 | ||
IF4_FLG_AIV :
|
このパラメータはアプリケーション独立変数です。 | ||
IF4_FLG_DYNVAR :
|
パラメータはダイナミック変数です。 | ||
IF4_FLG_XARRAY :
|
パラメータは x-array です。 | ||
IF4_FLG_LBVAR_0 :
|
次元 0 の下限は可変です。 | ||
IF4_FLG_UBVAR_0 :
|
次元 0 の上限は可変です。 | ||
IF4_FLG_LBVAR_1 :
|
次元 1 の下限は可変です。 | ||
IF4_FLG_UBVAR_1 :
|
次元 1 の上限は可変です。 | ||
IF4_FLG_LBVAR_2 :
|
次元 2 の下限は可変です。 | ||
IF4_FLG_UBVAR_2 :
|
次元 2 の上限は可変です。 | ||
int |
occurrences[IF4_MAX_DIM] |
各次元における配列のオカレンス。 | |
int |
indexfactors[IF4_MAX_DIM] |
各次元の配列インデックスファクタ。 | |
void * |
dynp |
内部使用に予約済み。 | |
void * |
pops |
内部使用に予約済み。 |
アドレス要素は、ダイナミック変数の配列および X-array に対してヌルです。この場合、配列データは全体としてアクセスすることはできませんが、下記のパラメータアクセス機能でアクセスする必要があります。
固定長の変数の固定範囲の配列に対して、配列の内容はアドレス要素を使用してダイレクトにアクセスすることができます。この場合、配列要素(i,j,k)のアドレスは以下のように計算されます(特に配列要素が連続していない場合)。
elementaddress = address + i * indexfactors[0] + j * indexfactors[1] + k * indexfactors[2]
配列の次元数が 3 次元よりも小さい場合は、最後の項が除外されます。
パラメータのアクセスに使用する機能の集合があります。処理フローは次のとおりです。
3GL プログラムは INTERFACE4
オプション付きの CALL
ステートメントで呼び出され、パラメータが 3GL プログラムに渡されます(上記を参照)。
その後、3GL プログラムではパラメータデータ自体またはフォーマット、長さ、配列情報などのパラメータに関する情報を検索するために、Natural のエクスポート機能を使用することができます。
エクスポート機能はパラメータデータを戻すことにも使用できます。
3GL プログラムから任意のサブプログラムをコールすために、新規パラメータセットを作成し、初期化する機能もあります。この機能を使用して、3GL プログラムがメモリを上書きしないようにするために、パラメータのアクセスが保証されます(Natural データは安全で、メモリは 3GL プログラムのデータ内を上書きすることはまだ可能です)。
以下では次のトピックについて説明します。
この機能は、任意のパラメータから必要な情報をすべて受け取るために、3GL プログラムで使用します。情報は、struct parameter_description
(上記を参照)に返されます。
プロトタイプ:
int ncxr_get_parm_info ( int parmnum, void *parmhandle, struct parameter_description *descr );
パラメータの説明:
parmnum |
パラメータの順序を表す番号。これにより、渡されたパラメータリストのパラメータが識別されます。範囲:0 ... numparm-1 |
|
parmhandle |
内部パラメータ構造へのポインタ | |
descr |
struct parameter_description のアドレス。
|
|
return |
戻り値: | 情報: |
0 |
OK | |
-1 |
無効なパラメータ番号。 | |
-2
|
内部エラーが発生しました。 | |
-7 |
インターフェイスバージョンの競合。 |
この機能は、任意のパラメータからデータを取得するために、3GL プログラムで使用します。
Natural は、指定したパラメータ番号でパラメータを識別し、指定したバッファサイズのアドレスにパラメータデータを書き出します。
パラメータデータが指定したバッファサイズより長い場合、Natural は指定した長さにそのデータを切り捨てます。外部 3GL プログラムは ncxr_get_parm_info
関数を、パラメータデータの長さを要求するために使用することができます。
パラメータデータを取得するための次の 2 つの関数が用意されています。ncxr_get_parm
は、(パラメータが配列の場合でも)パラメータ全体を取得します。それに対して、ncxr_get_parm_array
は指定された配列要素を取得します。
(ダイナミックまたはスタティックな)3GL プログラムにより、指定したサイズのメモリが "バッファ" に対して割り当てられない場合、予期できない結果になることがあります。Natural では NULL ポインタのチェックだけが実行されます。
タイプ I2/I4/F4/F8 の変数で、データが切り取られる場合(バッファ長がパラメータの合計長と等しくない)、その結果はマシンのタイプにより異なります(リトルエンディアン/ビッグエンディアン)。アプリケーションによっては、反復を可能にするために、スタティックデータを使用しないようにユーザー出口をプログラムする必要があります。
プロトタイプ:
int ncxr_get_parm( int parmnum, void *parmhandle, int buffer_length, void *buffer ) int ncxr_get_parm_array( int parmnum, void *parmhandle, int buffer_length, void *buffer, int *indexes )
この機能は、各次元のインデックスを指定可能であることを除けば、ncxr_get_parm
と同じです。未使用の次元のインデックスは 0
と指定しておく必要があります。
パラメータの説明:
parmnum |
パラメータの順序を表す番号。これにより、渡されたパラメータリストのパラメータが識別されます。範囲:0 ... numparm-1 |
|
parmhandle |
内部パラメータ構造へのポインタ | |
buffer_length |
要求したデータを書き出す必要のあるバッファの長さ。 | |
buffer |
要求したデータを書き出す必要のあるバッファのアドレス。このバッファは I2/I4/F4/F8 変数にアクセスしやすいように配置しておく必要があります。 | |
indexes |
インデックス情報をもつ配列 | |
return |
戻り値: | 情報: |
< 0 |
情報検索時のエラーを示します。 | |
-1 |
無効なパラメータ番号。 | |
-2 |
内部エラーが発生しました。 | |
-3 |
データは切り捨てられました。 | |
-4 |
データが配列ではありません。 | |
-7 |
インターフェイスバージョンの競合。 | |
-100 |
次元 0 のインデックスが範囲外です。 | |
-101 |
次元 1 のインデックスが範囲外です。 | |
-102 |
次元 2 のインデックスが範囲外です。 | |
0 |
操作に成功しました。 | |
> [0 ]
|
正常に行われましたが、(バッファの方がデータよりも長かったため)データの長さはこのバイト数になりました。 |
この機能は、任意のパラメータへデータを戻すために、3GL プログラムで使用します。Natural では、指定したパラメータ番号でパラメータを識別し、指定したバッファサイズとアドレスからパラメータデータを書き出します。パラメータデータが指定したバッファサイズより小さい場合、データはパラメータデータの長さに切り捨てられます。つまり、バッファの残りは無視されます。パラメータデータが指定したバッファサイズより大きい場合、データは指定したバッファ長だけコピーされます。パラメータの残りはそのままです。これは、配列にも同様に当てはまります。パラメータとしてのダイナミック変数については、パラメータのサイズが指定したバッファ長に変更されます。
タイプ I2/I4/F4/F8 の変数で、データが切り取られる場合(バッファ長がパラメータの合計長と等しくない)、その結果はマシンのタイプにより異なります(リトルエンディアン/ビッグエンディアン)。アプリケーションによっては、反復を可能にするために、スタティックデータを使用しないようにユーザー出口をプログラムする必要があります。
プロトタイプ:
int ncxr_put_parm ( int parmnum, void *parmhandle, int buffer_length, void *buffer ); int ncxr_put_parm_array ( int parmnum, void *parmhandle, int buffer_length, void *buffer, int *indexes );
パラメータの説明:
parmnum |
パラメータの順序を表す番号。これにより、渡されたパラメータリストのパラメータが識別されます。範囲:0 ... numparm-1 |
|
parmhandle |
内部パラメータ構造体を指すポインタ。 | |
buffer_length |
データを送るバッファのバッファアドレスを元に複写するためのデータの長さ。 | |
indexes |
インデックス情報。 | |
return |
||
戻り値: | 情報: | |
< 0 |
情報複写時のエラーを示します。 | |
-1 |
無効なパラメータ番号。 | |
-2 |
内部エラーが発生しました。 | |
-3 |
指定したデータが多すぎます。パラメータの長さで複写されました。 | |
-4 |
パラメータが配列ではありません。 | |
-5 |
パラメータは保護されています(定数または AD=O )。
|
|
-6 |
"メモリ不足" により、ダイナミック変数のサイズを変更できませんでした。 | |
-7 |
インターフェイスバージョンの競合。 | |
-13 |
指定したバッファに、不完全な Unicode 文字が含まれています。 | |
-100 |
次元 0 のインデックスが範囲外です。 | |
-101 |
次元 1 のインデックスが範囲外です。 | |
-102 |
次元 2 のインデックスが範囲外です。 | |
0 |
操作に成功しました。 | |
> [0 ]
|
正常に行われましたが、パラメータ長が指定された長さを超えていたため、パラメータの長さはこのバイト数になりました。 |
3GL プログラムが Natural サブプログラムを呼び出すには、サブプログラムが予期しているパラメータに対応するパラメータセットを構築する必要があります。関数 ncxr_create_parm
を使用して、ncxr_if_callnat
へのコールで渡すパラメータセットを作成します。作成されたパラメータセットは、CALL
INTERFACE4
ステートメントで 3GL プログラムに渡されるパラメータセットのように、opaque パラメータハンドルによって表されます。したがって、上記のように、新しく作成したパラメータセットは関数 ncxr_put_parm*
および ncxr_get_parm*
で操作することができます。
新しく作成したパラメータセットは、関数 ncxr_create_parm
を呼び出した後は、まだ初期化されていません。個々のパラメータは下記の ncxr_parm_init*
関数のセットによって特定データタイプに初期化されます。その後、関数 ncxr_put_parm*
および ncxr_get_parm*
は個々のパラメータの内容にアクセスするために使用されます。呼び出す側がパラメータセットを終了した後、それらはパラメータハンドルを削除する必要があります。したがって、ncxr_if4_callnat
を通して呼び出されるサブプログラムのパラメータセットの作成と使用の一般的なシーケンスは、次のようになります。
ncxr_create_parm ncxr_init_ parm* ncxr_init_ parm* ... ncxr_put_ parm* ncxr_put_ parm* ... ncxr_get_parm_info* ncxr_get_parm_info* ... ncxr_if4_callnat ... ncxr_get_parm_info* ncxr_get_parm_info* ... ncxr_get_ parm* ncxr_get_ parm* ... ncxr_delete_parm
関数 ncxr_create_parm
を使用して、ncxr_if_callnat
へのコールで渡すパラメータセットを作成します。
プロトタイプ:
int ncxr_create_parm( int parmnum, void** pparmhandle )
パラメータの説明:
parmnum |
作成するパラメータの数。 | |
pparmhandle |
作成されたパラメータハンドルへのポインタ。 | |
return |
戻り値: | 情報: |
< 0 |
エラー: | |
-1 |
パラメータカウントが不正です。 | |
-2 |
内部エラーが発生しました。 | |
-6 |
メモリ不足の状態です。 | |
0 |
操作に成功しました。 |
ncxr_create_parm
で作成されたパラメータセットを削除するには、関数 ncxr_delete_parm
を使用します。
プロトタイプ:
int ncxr_delete_parm( void* parmhandle )
パラメータの説明:
parmhandle |
削除するパラメータハンドルへのポインタ。 | |
return |
戻り値: | 情報: |
< 0 |
エラー: | |
-2 |
内部エラーが発生しました。 | |
0 |
操作に成功しました。 |
プロトタイプ:
int ncxr_init_parm_s( int parmnum, void *parmhandle, char format, int length, int precision, int flags );
パラメータの説明:
parmnum |
パラメータの順序を表す番号。これにより、渡されたパラメータリストのパラメータが識別されます。範囲:0 ... numparm-1 |
|
parmhandle |
パラメータハンドルへのポインタ。 | |
format |
パラメータのフォーマット。 | |
length |
パラメータの長さ。 | |
precision |
パラメータの精度。 | |
flags |
IF4_FLG_PROTECTED |
|
return |
戻り値: | 情報: |
< 0 |
エラー: | |
-1 |
無効なパラメータ番号。 | |
-2 |
内部エラーが発生しました。 | |
-6 |
メモリ不足の状態です。 | |
-8 |
フォーマットが正しくありません。 | |
-9 |
無効な長さまたは精度。 | |
0 |
操作に成功しました。 |
プロトタイプ:
int ncxr_init_parm_sa( int parmnum, void *parmhandle, char format, int length, int precision, int dim, int *occ, int flags );
パラメータの説明:
parmnum |
パラメータの順序を表す番号。これにより、渡されたパラメータリストのパラメータが識別されます。範囲:0 ... numparm-1 |
|
parmhandle |
パラメータハンドルへのポインタ。 | |
format |
パラメータのフォーマット。 | |
length |
パラメータの長さ。 | |
precision |
パラメータの精度。 | |
dim |
配列の次元。 | |
occ |
次元ごとのオカレンス数。 | |
flags |
フラグの組み合わせ。
|
|
return |
戻り値: | 情報: |
< 0 |
エラー: | |
-1 |
無効なパラメータ番号。 | |
-2 |
内部エラーが発生しました。 | |
-6 |
メモリ不足の状態です。 | |
-8 |
フォーマットが正しくありません。 | |
-9 |
無効な長さまたは精度。 | |
-10 |
無効な次元数。 | |
-11 |
変数制限の無効な組み合わせ。 | |
0 |
操作に成功しました。 |
プロトタイプ:
int ncxr_init_parm_d( int parmnum, void *parmhandle, char format, int flags );
パラメータの説明:
parmnum |
パラメータの順序を表す番号。これにより、渡されたパラメータリストのパラメータが識別されます。範囲:0 ... numparm-1 |
|
parmhandle |
パラメータハンドルへのポインタ。 | |
format |
パラメータのフォーマット。 | |
flags |
IF4_FLG_PROTECTED |
|
return |
戻り値: | 情報: |
< 0 |
エラー: | |
-1 |
無効なパラメータ番号。 | |
-2 |
内部エラーが発生しました。 | |
-6 |
メモリ不足の状態です。 | |
-8 |
フォーマットが正しくありません。 | |
0 |
操作に成功しました。 |
プロトタイプ:
int ncxr_init_parm_da( int parmnum, void *parmhandle, char format, int dim, int *occ, int flags );
パラメータの説明:
parmnum |
パラメータの順序を表す番号。これにより、渡されたパラメータリストのパラメータが識別されます。範囲:0 ... numparm-1 |
|
parmhandle |
パラメータハンドルへのポインタ。 | |
format |
パラメータのフォーマット。 | |
dim |
配列の次元。 | |
occ |
次元ごとのオカレンス数。 | |
flags |
フラグの組み合わせ。
|
|
return |
戻り値: | 情報: |
< 0 |
エラー: | |
-1 |
無効なパラメータ番号。 | |
-2 |
内部エラーが発生しました。 | |
-6 |
メモリ不足の状態です。 | |
-8 |
フォーマットが正しくありません。 | |
-10 |
無効な次元数。 | |
-11 |
変数制限の無効な組み合わせ。 | |
0 |
操作に成功しました。 |
プロトタイプ:
int ncxr_resize_parm_array( int parmnum, void *parmhandle, int *occ );
パラメータの説明:
parmnum |
パラメータの順序を表す番号。これにより、渡されたパラメータリストのパラメータが識別されます。範囲:0 ... numparm-1 |
|
parmhandle |
パラメータハンドルへのポインタ。 | |
occ |
次元当たりの新規オカレンス数。 | |
return |
戻り値: | 情報: |
< 0 |
エラー: | |
-1 |
無効なパラメータ番号。 | |
-2 |
内部エラーが発生しました。 | |
-6 |
メモリ不足の状態です。 | |
-12 |
オペランドが(指定された次元の 1 つで)サイズ変更可能ではありません。 | |
0 |
操作に成功しました。 |
すべての関数プロトタイプがファイル natuser.h
で宣言されます。