Probleme API Scilab

Fermé
youssinsa Messages postés 1 Date d'inscription mercredi 14 juin 2017 Statut Membre Dernière intervention 14 juin 2017 - Modifié le 14 juin 2017 à 16:25
Bonjour à tous,

je travaille actuellement sur la mise à niveau de toolbox Scilab, et ces modules utilisant du code C, j'ai besoin d'utiliser la nouvelle API de Scilab 6.0.0.

J'ai suivi à la lettre l'exemple d'implémentation présent dans l'aide de Scilab, mais pourtant ma fonction ne peut s’exécuter jusqu'au bout : lorsque je debug en step by step, j'observe que les variables qui sont censées récupérer automatiquement le nombre d'arguments avec lesquels la fonction a été appelée ont des valeurs aberrantes, et les scilabVar qui sont censées pointer les variables de Scilab ne sont en fait pas initialisées.

Est ce un problème de mon côté? un include manquant ? une initialisation oubliée ? la version de Visual qui est trop ancienne ?
Quelqu'un a t-il déjà rédigé une fonction d'interface avec la dernière API en date ?


Je suis sur Windows 7, Scilab 6.0.0, Visual Studio 2010

Voici le code de ma fonction d'interface :


#include "api_scilab.h"
#include "Scierror.h"
#include "sci_malloc.h"
#include "stdio.h"
#include "stdlib.h"
#include <localization.h>

#include "cimdistanceMap.h"

const char fname[] = "cimdistanceMap";


int sci_imdistanceMap(scilabEnv env, int nin, scilabVar* in, int nopt, scilabOpt* opt, int nout, scilabVar* out)
{
int inr1 = 0;
int inc1 = 0;
int size1 = 0;
double* in1 = NULL; //image source

int in2 = 0; // connectivity

double* out1 = NULL; //image dest

Scierror(999, "nin=%d\n", nin);
// Check number of parameters
if (nin != 2)
{
Scierror(999, "%s: Wrong number of input argument(s): %d expected.\n", fname, 2);
return STATUS_ERROR;
}

if (nout != 1)
{
Scierror(999, "%s: Wrong number of output arguments: %d expected.\n", fname, 1);
return STATUS_ERROR;
}

//in[0] : matrix 2d of double
if (scilab_isDouble(env, in[0]) == 0 || scilab_isMatrix2d(env, in[0]) == 0)
{
Scierror(999, "%s: Wrong type for input argument #%d: A double matrix expected.\n", fname, 1);
return STATUS_ERROR;
}
size1 = scilab_getDim2d(env, in[0], &inr1, &inc1);
scilab_getDoubleArray(env, in[0], &in1);

//in[1] : int
if (scilab_isInt32(env, in[1]) == 0 || scilab_isScalar(env, in[1]) == 0)
{
Scierror(999, "%s: Wrong type for input argument #%d: A int expected.\n", fname, 2);
return STATUS_ERROR;
}
scilab_getInteger32(env, in[1], &in2);

//out1 : matrix 2d of double with same size of in[0]
out[0] = scilab_createDoubleMatrix2d(env, inr1, inc1, 0);
scilab_getDoubleArray(env, out[0], &out1);


//call c function
cimdistanceMap(in1,inr1,inc1,in2,&out1);

return STATUS_OK;
}



Merci d'avance pour vos aides potentielles