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

MFC Discussion :

Utiliser des templates avec la macro DECLARE_DYNCREATE


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de vanitom
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 327
    Par défaut Utiliser des templates avec la macro DECLARE_DYNCREATE
    Bonjour,


    J'utilise un template avec une classe neccessitant obligatoirement un DECLARE_DYNACREATE

    J'ai suivi les conseils de Frascape et modifiant le contenu de la macro DECLARE_DYNCREATE mais rien n'y fait. J'ai toujours des erreurs

    Voici le code de la nouvelle macro :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #define IMPLEMENT_TEMPLATE_RUNTIMECLASS(TemplArg, class_name, base_class_name, wSchema, pfnNew) \
    	template <TemplArg> \
    		AFX_COMDAT const AFX_DATADEF CRuntimeClass class_name::class##class_name = { \
    		#class_name, sizeof(class class_name), wSchema, pfnNew, \
    			RUNTIME_CLASS(base_class_name), NULL }; \
    	template <TemplArg> \
    		CRuntimeClass* class_name::GetRuntimeClass() const \
    		{ return RUNTIME_CLASS(class_name); } \
    #define IMPLEMENT_TEMPLATE_DYNCREATE(TemplArg, class_name, base_class_name) \
    	template <TemplArg> \
    		CObject* PASCAL class_name::CreateObject() \
    			{ return new class_name; } \
    	IMPLEMENT_TEMPLATE_RUNTIMECLASS(TemplArg, class_name, base_class_name, 0xFFFF, \
    		class_name::CreateObject)
    Mais en l'utilisant comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IMPLEMENT_TEMPLATE_DYNCREATE (class T_GEFrameWnd, CGraphicEditorFrame<T_GEFrameWnd>, T_GEFrameWnd)
    j'ai les erreurs suivantes que je ne comprend définitivement pas.
    error C2143: syntax error : missing ';' before '<'
    error C2059: syntax error : ';'
    error C2143: syntax error : missing ';' before '<'
    Je me suis même amusé à reprendre le code de macro pour les remettre dans mon code à moi. Et pareil mais je ne comprend pas le problème, dont voici le code après la conversion manuelle des instructions du preprocesseur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    template <class T_GEFrameWnd>
    CRuntimeClass* CGraphicEditorFrame<T_GEFrameWnd>::GetRuntimeClass() const { return RUNTIME_CLASS(CGraphicEditorFrame<T_GEFrameWnd>); }
     
    template <class T_GEFrameWnd>
    AFX_COMDAT const AFX_DATADEF 
    CRuntimeClass CGraphicEditorFrame<T_GEFrameWnd>::classCGraphicEditorFrame<T_GEFrameWnd> = 
    { 
    	"CGraphicEditorFrame<T_GEFrameWnd>",
    	sizeof(class CGraphicEditorFrame<T_GEFrameWnd>), 
    	wSchema, pfnNew, RUNTIME_CLASS(T_GEFrameWnd), NULL
    };
    Donc si quelq'un avait une piste j'ai tout épuisé.

    Merci d'avance

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut,
    avec quel compilateur tu travailles v60 ? VC2005 ?

  3. #3
    Membre éclairé Avatar de vanitom
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 327
    Par défaut
    Salut

    Franchement oublier juste cette info c'est pas cool.
    Je compile avec VC6

  4. #4
    Membre éclairé Avatar de vanitom
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 327
    Par défaut
    Je m'y suis remis et j'ai comme l'impression que c'est impossible.

    Je commence à y aller sans passer par les macro et j'ai de problème avec le IMPLEMENT_RUNTIME_CLASS. C'est dû au commande de précompilation.

    Je ne vois conciler les commandes de précompilation et les templates.

    Voici le code de RuntimeClass
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define RUNTIME_CLASS ( class_name ) ((CRuntimeClass*)(&class_name::class##class_name))
    En remplacant les variables de la macro et les commande de précompilation, j'obtiens ça et c'est pas du tout logique.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((CRuntimeClass*)(&T_FrameWnd::classT_FrameWnd)
    Alors maintenant je crois que je suis dans une impasse.

  5. #5
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    pourtant dans un de mes posts ou j'ai evoqué ce sujet ,ça fonctionnait justement tres bien pour visual 6.0 et etait problematique sous vc2005 a cause des templates justement..

  6. #6
    Membre éclairé Avatar de vanitom
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 327
    Par défaut
    Alors premièrement, j'ai trouvé un autre moyen pour éviter d'utilser des templates avec des macros.


    Par contre, on ne va tarder à passer sous VC2005 et tes anciennes macros ne pas plus, il va falloir que je mette le pif dedans.


    Apparement ils ont commencé à la faire la macro en question mais pas exactement comme je le voulais. Ils font un
    template < typename ... > et pas un template < class ... >

    Mais bon maintenant que je sais ou chercher je trouverai bien une solution.

Discussions similaires

  1. Utilisation des champs avec macro
    Par PAM0306 dans le forum VBA Word
    Réponses: 1
    Dernier message: 17/10/2008, 17h22
  2. utilisation des templates avec javaMail
    Par bousnguar dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 12/09/2008, 15h42
  3. Utilisation des templates
    Par vanitom dans le forum MFC
    Réponses: 21
    Dernier message: 01/08/2007, 11h07
  4. [XSL] utilisation des templates
    Par KibitO dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 16/12/2005, 15h54
  5. Utilisation des templates
    Par mikky dans le forum C++
    Réponses: 1
    Dernier message: 14/09/2005, 12h59

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