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 données avec visual Studio 2010


Sujet :

C++/CLI

  1. #1
    Membre extrêmement actif
    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
    Par défaut Typage des données avec visual Studio 2010
    bonjour
    Je n'arrive pas à compiler le type string
    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'a pas la même interprétation:
    je vous joins le résultat de compilation
    OpenAFile.h(7): error C4368: impossible de définir 'sFileToOpen' comme membre de 'Test6::OpenAFile' managé*: les types mixtes ne sont pas pris en charge
    ce serait d'avoir un module qui accepte le type string

  2. #2
    Membre extrêmement actif

    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 408
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 408
    Par défaut
    bonsoir,

    et inclure le header adéquate?

  3. #3
    Membre extrêmement actif
    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
    Par défaut #include <string.h>
    ou mieux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #include <stdio.h>
    #include <string>
    Bien sur
    en fait il faut déclare les objets comme des objets 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);

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 482
    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.

  5. #5
    Membre extrêmement actif
    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
    Par défaut string ou 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.

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

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 482
    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.

  7. #7
    Membre extrêmement actif
    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
    Par défaut Je confirme ma position
    Comme je l'ai dit ailleurs j'ai une application de 50 000 lignes de code à migrer sous Visual Studio. Ce code est écrit en C++ natif.
    Pour passer sous Visual Studio C++, je me suis mis au C++/CLI, ok et au sein de la classe, je n'ai pas de problème à utiliser les type System::String. Cependant pour passer à l'application je dois repasser en std::wstring pour être compatible avec le code existant. il y a deux problèmes: convertir les System::String en wchar_t* et affecter les variables locales. le premier est résolu par le code ci après
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
                    wsLocalString = openFileDialog2->FileName;
    		using namespace Runtime::InteropServices;
                    const wchar_t* chars = (const wchar_t*)(Marshal::StringToHGlobalUni( wsLocalString)).ToPointer();
                    .
                    .// affecter la variable  finale avec le resultat acquit dans chars.
                    .// et libérer les ressources
                    Marshal::FreeHGlobal(IntPtr((void*)chars));
    il reste que l'accès des variables globales de type std::wstring n'est pas trivial; actuellement je n'ai pas de solution qui marche.

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

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

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

  9. #9
    Membre extrêmement actif
    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
    Par défaut Re-bonjour
    la fenêtre de mémoire n'est toujours pas ouverte. Quoi qu'il en soit on est maintenant dans le domaine de l'emploi du debugger. Je clos donc cette discussion

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

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 482

  11. #11
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par JeanNoel53 Voir le message
    une application de 50 000 lignes de code à migrer sous Visual Studio. Ce code est écrit en C++ natif.
    Pour passer sous Visual Studio C++, je me suis mis au C++/CLI
    Je ne vois pas le rapport.
    Visual Studio supporte très bien et est adapté à faire du C++ "classique".
    En tous cas le CLI n'est pas du tout obligatoire pour convertir en projet Visual Studio son application.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 10/02/2015, 17h46
  2. 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
  3. typage des string avec Visual Studio 2010 et C++/CLI
    Par JeanNoel53 dans le forum C++/CLI
    Réponses: 11
    Dernier message: 07/05/2012, 14h00
  4. Réponses: 0
    Dernier message: 22/11/2011, 11h38

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