O.S. Windows Seven
Scilab version 6.0.1
je suis parti dufournit dans la doc Scilab.A simple call_scilab example
Code c : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 #include <stdio.h> /* stderr */ #include "api_scilab.h" //#include "stack-c.h" /* Provide functions to access to the memory of Scilab */ #include "call_scilab.h" /* Provide functions to call Scilab engine */ int main(void) { /****** INITIALIZATION **********/ #ifdef _MSC_VER if ( StartScilab(NULL,NULL,NULL) == FALSE ) #else if ( StartScilab(getenv("SCI"),NULL,NULL) == FALSE ) #endif { fprintf(stderr,"Error while calling StartScilab\n"); return -1; } /****** ACTUAL Scilab TASKS *******/ SendScilabJob("myMatrix=['sample','for the help']"); SendScilabJob("disp(myMatrix);"); // Will display !sample for the help ! SendScilabJob("disp([2,3]+[-44,39]);"); // Will display - 42. 42. SendScilabJob("A=[1,2;3,4];"); SendScilabJob("B=inv(A);"); SendScilabJob("disp(A)"); SendScilabJob("disp(B)"); SendScilabJob("disp(A*B)"); /****** TERMINATION **********/ if ( TerminateScilab(NULL) == FALSE ) { fprintf(stderr,"Error while calling TerminateScilab\n"); return -2; } return 0; }
Je compile et j'exécute ce code sans problème.
Lorsque je transforme cela en fonction exportée par une DLL et que je lance cette fonction depuis un exécutable (64 bits) je déclenche une exception "Opération en virgule flottante incorrecte".
remarques complémentaires :
- l'application cliente démarre une fenêtre console
- les instructions "printf" ont été ajoutées en début et en fin de fonction, seule la première instruction est exécutée lors de mon test
Code c : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 #include <stdio.h> /* stderr */ #include "api_scilab.h" //#include "stack-c.h" /* Provide functions to access to the memory of Scilab */ #include "call_scilab.h" /* Provide functions to call Scilab engine */ //--------------------------------------------------------------------------- #if defined(__cplusplus) #define FRONTAL_EXPORT extern "C" __declspec( dllexport ) #else #define FRONTAL_EXPORT __declspec( dllexport ) #endif //--------------------------------------------------------------------------- FRONTAL_EXPORT int __cdecl _lancerSCILAB( int * numErr ) { printf("FRONTAL_EXPORT int __cdecl _lancerSCILAB : begin\n"); /****** INITIALIZATION **********/ #ifdef _MSC_VER if ( StartScilab(NULL,NULL,NULL) == FALSE ) #else if ( StartScilab(getenv("SCI"),NULL,NULL) == FALSE ) #endif { fprintf(stderr,"Error while calling StartScilab\n"); * numErr=1; return -1; } * numErr=0; printf("FRONTAL_EXPORT int __cdecl _lancerSCILAB : end\n"); return 0; }
.J'ai le même comportement pour Scilab5.5.2 64 bits
.En revanche tout fonctionne correctement avec Scilab5.5.2 32 bits
Voilà, pour le moment je n'ai pas trouvé de réponse à ce problème (ni sur Développez ni sur le Google)
N.B. l'includeest connu dans la version 5.5.2 mais pas en 6.0.1stack-c.h
Partager