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 :

[C++/CLI]Operateur << avec un flux std::ostream et une String managée


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2004
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 26
    Points : 28
    Points
    28
    Par défaut [C++/CLI]Operateur << avec un flux std::ostream et une String managée
    Bonjour,

    Je cherche a surchargé l'operateur << pour un flux de type std::ostream pour y concaténé une string managé de type System::String^.

    Voici l'implementation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    static ostream& operator<< (ostream& tmpOss, System::String^ message)
    {
    	string system = StringMarshaler::MarshalToNative(message);
    	tmpOss << system;
    	return tmpOss;
    }
    La méthode StringMarshaler::MarshalToNative transforme une string managée system::String^ en std::string. Voici le code si ca peut vous interesser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ref class StringMarshaler
    {
    public:	
    	static std::string MarshalToNative(System::String^ s)
    	{
    		char* ret=static_cast<char*>(System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(s).ToPointer());
    		std::string sret=ret;
    		System::Runtime::InteropServices::Marshal::FreeHGlobal((System::IntPtr)ret);
    		return sret;
    	}
    }
    Le problème c'est que ca ne marche pas tres bien , il ajoute dans mon flux une adresse de pointeur au lieu du contenu de la string. Je voulais savoir si on peut écrire ce genre d'operateur.

    Merci d'avance

  2. #2
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    le marshalling a l'air correct, tu me confirmes que la variable system possède bien la valeur attendue ?

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2004
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 26
    Points : 28
    Points
    28
    Par défaut
    Oui il marche bien...

    D'ailleurs quand je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     // Du code ...
    string system = StringMarshaler::MarshalToNative(message);
    tmpOss << system;
    // Du code ...
    Ca marche. Si message contient "Blabla", j'ai "Blabla" qui est affiché.

    Par contre des que j'utilise mon operateur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     // Du code ...
    tmpOss << message;
    // Du code ...
    Ca marche pas. Si message contient "Blabla", j'ai "0x123456" qui est affiché.

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    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 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Si tu mets un breakpoint dans ton operator<<, est-il atteint dans le programme ?
    Je suis prêt à parier que non, et que le problème est que ton operator<< est ignoré...

Discussions similaires

  1. problème avec les sauts de ligne dans une string
    Par hexdoc dans le forum Langage
    Réponses: 6
    Dernier message: 02/05/2008, 15h28
  2. Réponses: 7
    Dernier message: 14/03/2008, 14h50
  3. probleme avec le flux
    Par john93 dans le forum C++
    Réponses: 3
    Dernier message: 13/09/2007, 16h04
  4. Réponses: 2
    Dernier message: 16/07/2007, 15h34
  5. Problème avec les flux FileOutputStream
    Par fredonouille dans le forum Langage
    Réponses: 4
    Dernier message: 01/05/2007, 20h37

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