Pointer reading (Scilab gateway) — How to read pointer in a gateway.
Input argument profile:
SciErr createNamedPointer(void* _pvCtx, char* _pstName, void* _pvPtr)
Named variable profile:
SciErr readNamedPointer(void* _pvCtx, char* _pstName, 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.
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; }