Scilab Website | Contribute with GitLab | Mailing list archives | ATOMS toolboxes
Scilab Online Help
6.0.2 - Русский

Change language to:
English - Français - 日本語 - Português -

Please note that the recommended version of Scilab is 2024.1.0. This page might be outdated.
However, this page did not exist in the previous stable version.

Справка Scilab >> API Scilab > legacy > Low level functions > Pointer reading (Scilab gateway)

Pointer reading (Scilab gateway)

How to read pointer in a gateway.

Syntax

Input argument profile:

SciErr getPointer(void* _pvCtx, int* _piAddress, void** _pvPtr)

Named variable profile:

SciErr readNamedPointer(void* _pvCtx, const char* _pstName, void** _pvPtr)

Arguments

_pvCtx

Scilab environment pointer, pass in "pvApiCtx" provided by api_scilab.h

_piAddress

Address of the Scilab variable.

_pvPtr

Return address of pointer.

SciErr

Error structure where is stored errors messages history and first error number.

Description

This help describes how pointer can be handled through the Scilab API.

Gateway Source

#include "api_scilab.h"
int read_pointer(char *fname,void* pvApiCtx)
{
	SciErr sciErr;

	CheckInputArgument(pvApiCtx, 0, 1);
    CheckOutputArgument(pvApiCtx, 1, 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;
		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 test script

b_ref = [1,2;3,4];
a = read_pointer();
b = read_pointer(a);
if or(b <> b_ref) then error("failed"), end
Report an issue
<< nbInputArgument (Scilab gateway) Low level functions Pointer writing (Scilab gateway) >>

Copyright (c) 2022-2024 (Dassault Systèmes)
Copyright (c) 2017-2022 (ESI Group)
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Thu Feb 14 15:05:28 CET 2019