Pointer writing (Scilab gateway) — How to write pointer in a gateway.
Input argument profile:
SciErr getPointer(void* _pvCtx, int* _piAddress, void** _pvPtr)
Named variable profile:
SciErr createNamedPointer(void* _pvCtx, char* _pstName, void** _pvPtr)
Scilab environment pointer, pass in "pvApiCtx" provided by api_scilab.h
Address of the Scilab variable.
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.
int read_pointer(char *fname,unsigned long fname_len) { SciErr sciErr; CheckRhs(0,1); CheckLhs(1,1); if(Rhs == 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, Rhs + 1, (void*)pdblData); } else if(Rhs == 1) {//read mode int iType = 0; int* piAddr = NULL; 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, Rhs + 1, 2, 2, pdblData); } else { return 0; } if(sciErr.iErr) { printError(&sciErr, 0); return 0; } LhsVar(1) = Rhs + 1; return 0; }