ポインタの書き込み (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テストスクリプト

    b_ref = [1,2;3,4];
    a = read_pointer();
    b = read_pointer(a);
    if or(b <> b_ref) then error("failed"), end