IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Chaine de responsabilite et dll


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Fry
    Fry est d�connect�
    Membre confirm� Avatar de Fry
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    150
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 150
    Par d�faut Chaine de responsabilite et dll
    bonjour

    J ai fait un code permettant d implementer une chaine de responsabilite avec le message sous forme de template donc chaque maillon doit connaitre le type du message.
    Le probleme est qu' a present je veu que chaque maillon soit dans une dll et que le message parcour les dll...

    le pb c'est que je sais comment recuperer un pointeur sur un object contenu dans une dll mais pas comment construire mon object en lui passant le type pour recupere ensuite le pointeur


    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    // j ai une erreur a la compilation 
    extern "C" __declspec(dllexport) template<class T> Handler<T>* GetHandler(void);
     
    // sans creer les object dans la dll le code fonctionne:
    	// Avec Template chaine
    	HandlerManager< std::string> inst;
    	inst.AddHandler( new ConcreteHandler1<std::string>("ok1") );
    	inst.AddHandler( new ConcreteHandler2<std::string>("ok2") );
    	inst.AddHandler( new ConcreteHandler3<std::string>("ok3") );
    	inst.SendRequest("ok3");
    	inst.Clean();
    comment passer le type a la fonction qui se trouve dans la dll et qui doit construire l'object et renvoyer le pointeur?

  2. #2
    Membre confirm�
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    35
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 35
    Par d�faut
    les tempates sont compil�s pour chaque type que tu aura d�clar� dans ton code...
    Tu ne peux pas inclure une classe template dans une dll et l'instancier avec un type particulier. La seule possibilit� est de d�clar� ton template enti�rement dans le header de la DLL...

  3. #3
    Fry
    Fry est d�connect�
    Membre confirm� Avatar de Fry
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    150
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 150
    Par d�faut
    effectivement

    je pense que je vai definir moi meme le type dont j ai besoin avant de compiler la dll comme ca:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    extern "C" __declspec(dllexport)  Handler< std::string >* GetHandler(void);

  4. #4
    Expert confirm�

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par d�faut
    Je ne sais pas trop comment fonctionne ton HandlerManager, mais si tu ne le rend pas template, et fait d�river ConcreteHandler d'une classe non template ConcreteHandlerBase, �a pourrait donner un truc comme �a:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
     
       HandlerManager inst; 
       inst.AddHandler( new ConcreteHandler1<std::string>("ok1") ); 
       inst.AddHandler( new ConcreteHandler2<std::string>("ok2") ); 
       inst.AddHandler( new ConcreteHandler3<std::string>("ok3") ); 
       inst.SendRequest("ok3"); 
       inst.Clean();
    en exportant HandlerManager et ConcreteHandlerBase d'une dll utilis�e par ton exe / les autres dll, il ne devrait pas y avoir de probl�mes.
    Sinon tu ne peux pas exporter un template d'une dll (car �a n'a pas de sens), mais tu peux exporter des instanciations de template pour un type particulier (donc exporter ConcreteHandler<std::string>, ...).

  5. #5
    Fry
    Fry est d�connect�
    Membre confirm� Avatar de Fry
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    150
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 150
    Par d�faut
    en fait le template du HandlerManager sert a autoriser l'utilisation de n'importe que type de message ayant surcharge l'operateur ==

    donc en fixant le type du message je peu ajouter un maillon contenu dans une dll mais si je met le handlerManager dans une dll ca rique de reporter le probleme si il y a plusieur dll

    effectivement j exporte des instanciation avec un type de message particulier le but etait de faire passer une commande entre une chaine de dll et qu il soit traite par la bonne dll

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
    DLL2_API Handler<std::string>* GetHandler(void)
    {
    	Handler<std::string>* inst = new ConcreteHandler1<std::string>("dll1");
    	return inst;
    }
    sinon pour la gestion de la memoire est ce que je peu liberer l'object creer dans la dll directement dans le programme appelant ou est ce que je dois ecrire une fonction clean interne a la dll que j appel ensuite?

  6. #6
    Expert confirm�

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par d�faut
    Oui tu peux en compilant pour que la dll et l'exe utilisent la m�me CRT.

  7. #7
    Fry
    Fry est d�connect�
    Membre confirm� Avatar de Fry
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    150
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 150
    Par d�faut
    comment faire et qu'est que le CRT?
    [edit] visiblement ca plante pas [/edit]

    Autrement pour partager une classe commune en singleton entre les differentes dll, y a t-il une autre solution que de passer un pointeur?

  8. #8
    Expert confirm�

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par d�faut
    C Runtime Library
    c'est la lib standard, le code qui est derri�re fstream, cout, etc...
    Faut configurer pour utiliser �a sous forme de dll, sinon c'est dupliqu� pour chaque dll/exe compil�.
    prorpi�t�s->C/C++->G�n�ration de code->Biblioth�que runtime : DLL.

    Pour la partage, si tes dll ne sont pas li�es dynamiquement � ton exe (chargement plus tard qu'au lancement de l'exe, bref pas un plugin quoi), tu peux simplement exporter ta classe, tout comme tu exporte GetHandler dans ton exemple.

Discussions similaires

  1. R�ponses: 3
    Dernier message: 31/03/2011, 20h03
  2. [Cha�ne de responsabilit�s] Design pattern chaine de responsabilit�
    Par Luffy_San dans le forum Design Patterns
    R�ponses: 3
    Dernier message: 13/02/2008, 08h49
  3. DLL .NET pour vb6 : Tableau de chaine
    Par BacChusx dans le forum Windows Forms
    R�ponses: 2
    Dernier message: 16/10/2007, 11h32
  4. R�ponses: 4
    Dernier message: 20/10/2006, 16h19
  5. result: chaine de caract�re pour une DLL
    Par Sephiroth Lune dans le forum Langage
    R�ponses: 7
    Dernier message: 27/07/2004, 23h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo