オプション引数を取得 (Scilabゲートウェイ)
呼び出し手順
int getOptionals(void* _pvCtx, char* fname, rhs_opts opts[])
引数
- _pvCtx
Scilab環境ポインタ, api_scilab.h により定義された "pvApiCtx"で指定.
- fname
コールする関数の名前.
- opts
オプション引数の構造体配列
説明
オプション引数を使用するCゲートウェイ関数.
例
この例では, Cインターフェイス関数は 複数のオプション引数をとり, その次元を取得します.
#include "api_scilab.h" #include "sciprint.h" #include "sciprint.h" #include "sciprint.h" int sci_use_optional(char * fname) { SciErr sciErr; char* pstName = NULL; int iAge = 0; int iDL = 0; static rhs_opts opts[] = { { -1, "age", -1, 0, 0, NULL}, { -1, "drivinglicense", -1, 0, 0, NULL}, { -1, "name", -1, 0, 0, NULL}, { -1, NULL, -1, 0, 0, NULL} }; int nopt = NumOpt(); CheckInputArgument(pvApiCtx, 0, nopt); CheckOutputArgument(pvApiCtx, 0, 1); if (getOptionals(pvApiCtx, fname, opts) == 0) { //Error return 1; } if (opts[0].iPos != -1) {//age double dblAge = 0; getScalarDouble(pvApiCtx, opts[0].piAddr, &dblAge); iAge = (int)dblAge; } else { iAge = 77; } if (opts[1].iPos != -1) {//drivinglicense getScalarBoolean(pvApiCtx, opts[1].piAddr, &iDL); } else { iDL = 0; } if (opts[2].iPos != -1) {//名前 getAllocatedSingleString(pvApiCtx, opts[2].piAddr, &pstName); } else { pstName = strdup("John Doe"); } sciprint("Read information: \n"); sciprint("\tName: \t\t\t%s\n", pstName); sciprint("\tAge: \t\t\t%d\n", iAge); sciprint("\tDriving licence: \t%s\n", iDL ? "Yes" : "No"); //戻り値なし AssignOutputVariable(pvApiCtx, 0) = 1; return 0; }
Scilab テストスクリプト
use_optional(); use_optional(name = "M. Puffin"); use_optional(age = 25, name = "M. Puffin"); use_optional(drivinglicense = %t, age = 25, name = "M. Puffin");
履歴
バージョン | 記述 |
5.5.0 | この関数は Scilab 5.5.0で追加されました |
Report an issue | ||
<< optionals | optionals | polynomial >> |