ポインタの書き込み (Scilabゲートウェイ)
ゲートウェイでポインタを書き込む方法.
既存のデータから作成.
呼び出し手順
入力引数プロファイル:
SciErr createPointer(void* _pvCtx, int _iVar, const void* _pvPtr)
名前指定変数プロファイル:
SciErr createNamedPointer(void* _pvCtx, const char* _pstName, void const** _pvPtr)
引数
- _pvCtx
Scilab環境ポインタ, api_scilab.h により定義された "pvApiCtx"で指定.
- _iVar
変数を保存するScilabメモリの位置
- _pstName
"名前指定"関数の場合の変数名.
- _pvPtr
ポインタのアドレス.
- SciErr
エラー構造体で,エラーメッセージ履歴と最初のエラー番号を格納します.
Scilabメモリに直接書き込み.
呼び出し手順
SciErr allocPointer(void* _pvCtx, int _iVar, void** _pvPtr)
引数
- _pvCtx
Scilab環境ポインタ, api_scilab.h により定義された "pvApiCtx"で指定.
- _piAddress
Scilab変数のアドレス.
- _pvPtr
返されるポインタのアドレス.
- SciErr
エラー構造体で,エラーメッセージ履歴と最初のエラー番号を格納します.
説明
このヘルプはScilab APIによりポインタを処理する方法を示します.
Scilabメモリに書き込む際には, 2種類の関数を使用できます.
ゲートウェイのソース
#include "api_scilab.h" int read_pointer(char *fname,void* pvApiCtx) { SciErr sciErr; CheckInputArgument(pvApiCtx, 0, 1); CheckOutputArgument(pvApiCtx, 0, 1); if(nbInputArgument(pvApiCtx) == 0) {//モードを作成 double* pdblData = (double*)malloc(sizeof(double) * 2 * 2); pdblData[0] = 1; pdblData[1] = 3; pdblData[2] = 2; pdblData[3] = 4; sciErr = createPointer(pvApiCtx, nbInputArgument(pvApiCtx) + 1, (void*)pdblData); } else if(nbInputArgument(pvApiCtx) == 1) {//モードを読み込み int iType = 0; int* piAddr = NULL; const void* pvPtr = NULL; double* pdblData = NULL; sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddr); if(sciErr.iErr) { printError(&sciErr, 0); return 0; } sciErr = getPointer(pvApiCtx, piAddr, &pvPtr); if(sciErr.iErr) { printError(&sciErr, 0); return 0; } pdblData = (double*)pvPtr; sciErr = createMatrixOfDouble(pvApiCtx, nbInputArgument(pvApiCtx) + 1, 2, 2, pdblData); } else { return 0; } if(sciErr.iErr) { printError(&sciErr, 0); return 0; } AssignOutputVariable(pvApiCtx, 1) = nbInputArgument(pvApiCtx) + 1; return 0; }
Scilabテストスクリプト
Report an issue | ||
<< ポインタの読み込み (Scilabゲートウェイ) | Low level functions | 多項式の記号変数 (Scilabゲートウェイ) >> |