youssinsa
Messages postés1Date d'inscriptionmercredi 14 juin 2017StatutMembreDernière intervention14 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
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);