Bon j'ai avancé un peu dans mon problème ... Mais c'est toujours pas ça.
Déjà j'ai changé d'environnement : j'utilise désormais Visual C++ 2005 Express (gratuit et débugger génial pour utiliser la DLL en même temps qu'Excel). Mais ça ne change rien au problème. Les déclarations changent un petit peu, c'est tout.
En fait on n'est plus obligé d'utiliser extern "C" et __stdcall. Ce dernier choix se fait dans les options du compilateur. Il suffit également d'ajouter un fichier de définition des fonctions à exporter.
Il suffira juste d'utiliser
# define DLLEXPORT __declspec (dllexport)
pour exporter une fonction ou une classe.
J'ai trouvé une petite parade pour pouvoir utiliser un objet. Voici le code de ma DLL :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| class DLLEXPORT Interface {
public:
Interface();
virtual ~Interface() = 0;
virtual const int getX() const = 0;
};
class DLLEXPORT C : public Interface {
private:
int x;
public:
C();
virtual ~C();
virtual const int getX() const;
}; |
avec dans mon .cpp le code suivant :
1 2 3
| const int C::getX() const {
return x;
} |
Sous VB, j'obtiens bien une valeur de x (aléatoire vu que je ne l'ai pas définie).
Maintenant, en ajoutant cette méthode :
const int setXToNewObj(C*, int);
en la définissant ainsi :
1 2 3 4
| const int C::setXToNewObj(C* Adress, int _x) {
Adress->setX(_x);
return Adress->x;
} |
et un constructeur de l'objet (oui je sais c'est pas génial mais bon ...) définit de cette façon :
1 2 3
| C* C::getNewObjAdress() {
return (new C);
} |
Je peux maintenant utiliser mon objet sous VB mais c'est vraiment pas génial au niveau synthaxe. Surtout je ne peux pas utiliser ma méthode setX() originale. Donc je suis obligé de reécrire toute mes méthodes que je souhaite exporter !!! Je pense qu'il existe une manière de faire ça beaucoup plus facilement ... mais laquelle ?
Partager