How to write pointer in a gateway.
Input argument profile:
SciErr createPointer(void* _pvCtx, int _iVar, const void* _pvPtr)
Named variable profile:
SciErr createNamedPointer(void* _pvCtx, const char* _pstName, void const** _pvPtr)
Scilab environment pointer, pass in "pvApiCtx" provided by api_scilab.h
Position in the Scilab memory where you want to put the variable
Name of the variable for "named" functions.
Address of pointer.
Error structure where is stored errors messages history and first error number.
SciErr allocPointer(void* _pvCtx, int _iVar, void** _pvPtr)
Scilab environment pointer, pass in "pvApiCtx" provided by api_scilab.h.
Address of the Scilab variable.
Return address of pointer.
Error structure where is stored errors messages history and first error number.
This help describes how pointer can be handled through the Scilab API.
Two types of functions can be used to write in the memory of Scilab.
#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) {//create mode 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) {//read mode 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; }