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++/CLI Discussion :

Erreur lors de l'instanciation d'une classe dans mon service


Sujet :

C++/CLI

  1. #1
    Membre actif

    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2003
    Messages
    286
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 286
    Points : 255
    Points
    255
    Par défaut Erreur lors de l'instanciation d'une classe dans mon service
    Bonjour,

    J'ai créé un service en C++.
    J'ai une classe C++ que je voudrais instancier.

    Voila ce que je fais (dans le fichier .h du service) :

    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
    ...
    #include "Principale.h"
     
    namespace ServicePointeuse {
     
    	public ref class ServicePointeuseWinService : public System::ServiceProcess::ServiceBase
    	{
    	...
    	private: System::Windows::Forms::Timer^  timerBT;
    	...
    	private:
    		CPrincipale AppPrinc;
    	...
    	};
    }
    La classe CPrincipale est une classe C++ "standard" ...

    Et voila l'erreur que je ne comprends pas du tout :

    error C4368: impossible de définir 'AppPrinc' comme membre de 'ServicePointeuse::ServicePointeuseWinService' managé : les types mixtes ne sont pas pris en charge c:\documents and settings\usertest\mes documents\visual studio 2005\projects\ servicepointeuse\ servicepointeuse\ ServicePointeuseWinService.h
    Je galère vraiment sur mon service C++ en ce moment ... Je trouve le code monstrueux ...
    .: La cosse : il n'y a que ça de vrai :.

  2. #2
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Ce n'est pas du C++ mais du C++/CLI qui est un tout autre langage. Il faut poser la question sur un des forums .NET.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  3. #3
    Membre actif

    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2003
    Messages
    286
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 286
    Points : 255
    Points
    255
    Par défaut
    Ok pour le déplacement du sujet ...

    Je suis toujours un peu largué ..
    Je viens de lire ca :
    http://msdn2.microsoft.com/en-us/library/xhfb39es.aspx
    C'est l'erreur que j'ai ...
    Mais je n'ai pas envie que ma classe CPrincipale soit managée !
    J'ai testé les :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #pragma unmanaged
    ...
    #pragma managed
    Mais ca ne change rien (ou je m'y prends mal ...)

    Quelqu'un saurait-il m'expliquer ?

    Merci
    .: La cosse : il n'y a que ça de vrai :.

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    .Net n'apprécie pas trop avoir un objet non-managé directement dans une classe managée, voilà.

    Si tu utilises un pointeur, par contre, je crois bien que ça passe.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre actif

    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2003
    Messages
    286
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 286
    Points : 255
    Points
    255
    Par défaut
    Merci pour la réponse, j'avais effectivement crû comprendre que le mieux était de travailler avec des pointeurs dans une classe managée.

    Voila mon code qui compile (a voir plus tard s'il fonctionne ^^) :

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    ...
    #include "Principale.h"
     
    namespace ServicePointeuse {
     
    	public ref class ServicePointeuseWinService : public System::ServiceProcess::ServiceBase
    	{
    	public:
    		ServicePointeuseWinService()
    		{
    			...
    			AppPrinc = new CPrincipale();
    		}
    	protected:
    		~ServicePointeuseWinService()
    		{
    			...
    			delete AppPrinc;
    		}
    	...
    	private: System::Windows::Forms::Timer^  timerBT;
    	...
    	private:
    		CPrincipale* AppPrinc;
    	...
    	private:
    		System::Void timerBT_Tick(System::Object^  sender, System::EventArgs^  e)
    		{
    			if (this->AppPrinc->AsFinished() == true)
    			{
    				...
    			}
    		}
    	};
    }
    Par contre plusieurs remarques :
    - Je n'ai pas compris a quoi servaient les #pragma unmanaged
    - Ca ressemble etrangement a une usine a gaz (mais quel est l'intéret de foutre le code dans le .h ??? )
    - Pourquoi quand je crée un service C++ il me sort du C++/CLI ?

    ...
    .: La cosse : il n'y a que ça de vrai :.

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Citation Envoyé par basnifo
    Merci pour la réponse, j'avais effectivement crû comprendre que le mieux était de travailler avec des pointeurs dans une classe managée.

    Voila mon code qui compile (a voir plus tard s'il fonctionne ^^) :

    Pas mal, mais je pense (je ne suis pas sûr) que tu devrais mettre les delete dans un finaliseur au lieu du destructeur.

    Par contre plusieurs remarques :
    - Je n'ai pas compris a quoi servaient les #pragma unmanaged
    Moi, je serais du genre à dire "À rien". En fait, je n'en ai pas encore eu l'utilité.
    - Ca ressemble etrangement a une usine a gaz (mais quel est l'intéret de foutre le code dans le .h ??? )
    Aucun. Je ne sais pas pourquoi Visual fait cela par défaut. Tu peux tout-à-fait mettre toute l'implémentation dans le .cpp...
    - Pourquoi quand je crée un service C++ il me sort du C++/CLI ?
    Je suppose que c'est parce que "service" est un type de projet .Net...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. crash lors de l'instanciation d'une classe
    Par malus56 dans le forum C++
    Réponses: 5
    Dernier message: 05/07/2011, 08h48
  2. Erreur lors de l'instanciation d'une classe
    Par Aloneghost dans le forum Langage
    Réponses: 6
    Dernier message: 21/06/2010, 21h14
  3. Null pointer lors de l'instanciation d'une class
    Par saraya dans le forum Langage
    Réponses: 4
    Dernier message: 06/05/2009, 17h53
  4. Réponses: 5
    Dernier message: 03/12/2006, 16h15
  5. [vb.net] erreur lors de l'éxécution d'une classe
    Par os_rasta dans le forum VB.NET
    Réponses: 10
    Dernier message: 01/12/2005, 18h34

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