Exporter une class depuis une DLL et l'utiliser dans un programme quelconque

Résolu
cs_Havy Messages postés 7 Date d'inscription dimanche 12 juillet 2009 Statut Membre Dernière intervention 12 août 2009 - 12 juil. 2009 à 11:05
cs_Havy Messages postés 7 Date d'inscription dimanche 12 juillet 2009 Statut Membre Dernière intervention 12 août 2009 - 12 juil. 2009 à 17:58
DLL contenant la classe (Maths.dll)



#define DllExport __declspec (dllexport)

class DllExport Test
{
    private: int nombre;
    public: int Carre(int n)
    {
        nombre = n;
        return nombre*2;
    }
}

Programme utilisant la DLL (Essai.cpp)

Dans ce fichier, je voudrais pouvoir par exemple à un moment donné faire :

Test petit_test;

petit_test.Carre(2);

Voilà je voudrais simplement faire ça, bien sur je n'ai pas écris tout le code, je voudrais juste savoir ce quil faut mettre
par rapport aux dllexport, dllimport et tout ça, pour pouvoir compiler et enfin pouvoir utiliser ma classe.

Je vous remercie par avance de votre aide :)

3 réponses

cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
12 juil. 2009 à 17:08
Désolé; deuxième essai :


là où tu veux utiliser la classe :
class __declspec(dllimport)
Test
{
private : int nombre;
public : int Carre(int n);
};

en général, pour éviter les problèmes, on définit la classe dans un .h que l'on utilise à la fois dans les projets dll et utilisation;
il faut alors définir une macro pour préciser dans quel cas on est (le compilateur doit savoir s'il fiat exporter ou importer la classe), par exemple :

// class.h

#pragma once

#ifdef DLL_VERSION
#define IOCLASS __declspec(dllimport)
#else
#define IOCLASS __declpsec(dllexport)
#endif

class IOCLASS Test
{
private: int Nombre;
public: int Carre(int n);
};


Pour la dll :

// dll.cpp

#define DLL_VERSION
#include "Class.h"

int Test::Carre(int n){return n*n;}



Pour utiliser dans un projet, simplement :
// source.cpp

#include "Class.h"

Test t;
3
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
12 juil. 2009 à 17:07
là où tu veux utiliser la classe :

class __declspec(dllimport) Test
{
private : int nombre;
public : int Carre(int n);
};

en général, pour éviter les problèmes, on définit la classe dans un .h que l'on utilise à la fois dans les projets dll et utilisation; il faut alors définir une macro pour préciser dans quel cas on est (le compilateur doit savoir s'il fiat exporter ou importer la classe), par exemple :

// class.h
#pragma once

#ifdef DLL_VERSION
#define IOCLASS __declspec(dllimport)
#else
#define IOCLASS __declpsec(dllexport)
#endif

class IOCLASS Test
{
private: int Nombre;
public: int Carre(int n);
};


Pour la dll :

// dll.cpp

#define DLL_VERSION
#include "Class.h"

int Test::Carre(int n){return n*n;}


Pour utiliser dans un projet, simplement :

// source.cpp

#include "Class.h"

Test t;
0
cs_Havy Messages postés 7 Date d'inscription dimanche 12 juillet 2009 Statut Membre Dernière intervention 12 août 2009
12 juil. 2009 à 17:58
Ok merci, c'est très pertinent.

Encore merci et à bientôt :)
0
Rejoignez-nous