Bonjour
J’essaye de créer une solution sous Visual Studio 2003 qui crée un XLL pouvant etre utilisé sous Excel.
Pour cela, j’utilise XLW (wrapper C++) que j’ai trouvé sur le net (http://xlw.sourceforge.net).
Si je compile la version 1.2.2 tout fonctionne parfaitement.
Je prends donc le projet du zip ecrit en Visual 6. VS2003 me le convertit en solution et tout fonctionne très bien à la compilation.
Cette solution contient deux sous-projets :
XLW qui est le wrapper
Xlwexample qui est l’exemple d’utilisation (subtil hein.. !)
Dans ce dernier on a ce genre de code (xlwExample.cpp)
Je rajoute donc un projet (j’arrive au problème…) qui servira à fournir les fonctions de calcul dont par exemple ce fichier
Code : 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 extern "C" { LPXLOPER EXCEL_EXPORT xlCirc(XlfOper xlDiam) { EXCEL_BEGIN; // Converts d to a double. double ret=xlDiam.AsDouble(); // Multiplies it. ret *= 3.14159; // Returns the result as a XlfOper. return XlfOper(ret); EXCEL_END; } }
(test.h)
Dans le fichier xlwexample.cpp je rajoute donc la ligne suivante avant la ligne extern « c »
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 double f1(double x) { return (x*x-1) ; }
Tout fonctionne parfaitement lorsque je lance Excel et le XLL, il me calcule bien la circonférence.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 #include "test.h"
Si maintenant je transforme mon fichier test.h en
Et que je transforme le fichier xlwExample.cpp en
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 #include <math.h> double f1(double x) { return (x*x-1) ; } double f2(double x) { return exp(x); }
A la compilation tout fonctionne bien, par contre à l’execution rien ne fonctionne. Il me dit que le fichier XLL n’est pas un Add-in Valide => ca marche pas…
Code : 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 extern "C" { LPXLOPER EXCEL_EXPORT xlCirc(XlfOper xlDiam) { EXCEL_BEGIN; // Converts d to a double. double ret=xlDiam.AsDouble(); // Multiplies it. //ret *= 3.14159; ret = f2(4); /////////////!!!!!!!!!! Cest ici quest le changement !!!!!!!!!!!!/// // Returns the result as a XlfOper. return XlfOper(ret); EXCEL_END; } }
J’avoue que j’ai un peu du mal à comprendre …
Si qqun sait m’aider ?
Merci
DH
PS : désolé pour la longue tartine :-)
Partager