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 :

typage des string avec Visual Studio 2010 et C++/CLI


Sujet :

C++/CLI

  1. #1
    Débutant
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

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

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Points : 332
    Points
    332
    Par défaut typage des string avec Visual Studio 2010 et C++/CLI
    Bonjour
    J'ai codé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public ref class OpenAFile : public System::Windows::Forms::Form
    	{
    	private: 
    	    System::Windows::Forms::Button^  button3;
    		Form^ form1;
    	public:
    		std::string sFileToOpen;
    Je suis en mode managé mais la documentation me dit que j'ai le droit de faire cohabiter du code managé et du code natif.
    le compilateur n'as pas la même interprétation:
    OpenAFile.h(7): error C2039: 'string'*: n'est pas membre de 'std'
    OpenAFile.h(7): error C2146: erreur de syntaxe*: absence de ';' avant l'identificateur 'sFileToOpen'
    OpenAFile.h(7): error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque*: C++ ne prend pas en charge int par défaut
    OpenAFile.h(7): error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque*: C++ ne prend pas en charge int par défaut
    ce serait d'avoir un module qui accepte le type string
    note au sujet de la première erreur que j'ai le même résultat sur les autres erreurs si je déclare simplement string.

  2. #2
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 832
    Points : 2 625
    Points
    2 625
    Par défaut
    As-tu pensé à inclure string?

    Un petit #include <string> me semble plutôt opportun dans ton code.

  3. #3
    Débutant
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

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

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Points : 332
    Points
    332
    Par défaut Bonjour
    Le résultat ci dessus est acquit avec l'include string
    ça marche mieux avec deux includes stdio.h et string mais dans ce cas il dit qu'il n'arrive pas à gérer une chaine string en mode managé, et le coach C++/CLI dit qu'il sait gérer les deux.

  4. #4
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 832
    Points : 2 625
    Points
    2 625
    Par défaut
    Le string en managé est peut-être inclus dans un autre espace de nommage?
    Je ne connaît pas C++/CLI donc je ne peux pas t'aider beaucoup plus...

    Si j'étais à ta place, j'irai vérifier dans les header pour comprendre ce qui se passe je pense.

  5. #5
    Débutant
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

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

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Points : 332
    Points
    332
    Par défaut Les donnée qui doivent être vues
    avec le C++/CLI il faut déclarer les données comme des données globales
    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
    std::string sFileToOpen;
    std::string sPathOfTheFile;
    std::string sDiskOfTheFile;
    namespace Test6 {
    	using namespace System;
    	using namespace System::ComponentModel;
    	using namespace System::Collections;
    	using namespace System::Windows::Forms;
    	using namespace System::Data;
    	using namespace System::Drawing;
    	using namespace System::IO;
        /// <summary>
    	/// Description résumée de OpenAFile
    	/// </summary>
    	public ref class OpenAFile : public System::Windows::Forms::Form
    	{
    	private: 
    		Form^ form1;
    	public:
     
    		OpenAFile::OpenAFile(void);
    		OpenAFile::OpenAFile(Form^ form1);
    		OpenAFile::~OpenAFile();
     
    		void Test6::OpenAFile::InitializeComponent(void);

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 073
    Points : 12 119
    Points
    12 119
    Par défaut
    NON.

    Il ne faut pas mélanger les torchons et les serviettes.

    Dans des classes managées, vous ne devez utiliser que des classes managées.

    .NET dispose de la classe System::String, bien plus sympa que la classe std::string.

  7. #7
    Débutant
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

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

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Points : 332
    Points
    332
    Par défaut System::String vs static std:string
    Les deux sont effectivement possible. J'ai opté pour la seconde. Ce choix est provisoire, je prendrai à ce sujet une décision pour le projet définitif. Pour l'instant je dois d'abord faire marcher la maquette.

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 073
    Points : 12 119
    Points
    12 119
    Par défaut
    Votre choix n'est pas une option, c'est un cul de sac.
    Faites-moi confiances.

    Il ne faut pas mélanger le monde managé et natif.
    Le code intermédiaire entre ces mondes est complexe et il est inutile de complexifier votre maquette pour rien.

    Revenez sur votre choix.
    Il suffira de supprimer vos std::string une par une et de remplacer le code en erreur indiqué par le compilateur par le nom du membre static de la classe.
    Il n'y a aucun refactoring à faire, juste du copier-coller de nom de membre.
    Cela devrait prendre 1 minute par variable, au grand maximum, pour un projet de la taille d'une maquette.

    C'est simple, rapide et cela vous épargnera bien des désagréments.

  9. #9
    Débutant
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

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

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Points : 332
    Points
    332
    Par défaut Même réponse que sur l'autre thread
    J'ai besoin de variables globales de type std::wstriing et je ne sais pas les affecter.

  10. #10
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 073
    Points : 12 119
    Points
    12 119
    Par défaut
    Globale ou pas, le mécanisme de Marshaling des string entre le code managé et natif est le même.

  11. #11
    Débutant
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

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

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Points : 332
    Points
    332
    Par défaut je galère sous le débugger
    J'ai compris ce que vous m'avez dit. J'en accepte l'augure. Mais je cherche toujours à le vérifier et je ne sais pas comment ouvrir une fenêtre mémoire.
    Je clos cette discussion sur cette base. Le reste est de l'emploi du debugger

  12. #12
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 073
    Points : 12 119
    Points
    12 119

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Faire des tests unitaires avec Visual Studio 2010
    Par Francis Walter dans le forum Visual Studio
    Réponses: 4
    Dernier message: 30/10/2014, 13h53
  2. Typage des données avec visual Studio 2010
    Par JeanNoel53 dans le forum C++/CLI
    Réponses: 10
    Dernier message: 07/05/2012, 15h46
  3. Réponses: 0
    Dernier message: 22/11/2011, 11h38
  4. Des getters er des Setters avec visual Studio 2005
    Par zghidi dans le forum Visual Studio
    Réponses: 9
    Dernier message: 27/02/2008, 13h37

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