Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2963 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Conversion System::String* en std::string

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Conversion System::String* en std::string

n°1121560
ronin111
Posté le 16-06-2005 à 09:50:16  profilanswer
 

Bonjour
 je voulais faire cette conversion avec cette methode que j'ai trouve dans la MSDN :
 
void wDBA::MarshalString ( System::String* s, std::string& os )
 {
 
   
   using namespace System::Runtime::InteropServices;
   const char* chars =  
    (const char*)(Marshal::StringToHGlobalAnsi(s)).ToPointer();
   os = chars;
   Marshal::FreeHGlobal(System::IntPtr((void*)chars));
   
 }
 
Et j'ai testé comme suivant :
MarshalString ("123456789123456789",var_std_string)
 
J'ai une levée de l'exception StackOverFlowException , je ne sais pourquoi  
 
Pouriiez-vous m'aidez ?
 
Merci

mood
Publicité
Posté le 16-06-2005 à 09:50:16  profilanswer
 

n°1122049
Lam's
Profil: bas.
Posté le 16-06-2005 à 15:13:27  profilanswer
 

ronin111 a écrit :

Bonjour

Code :
  1. void wDBA::MarshalString ( System::String* s, std::string& os )
  2. {
  3. ...
  4.     const char* chars =
  5.         (const char*)(Marshal::StringToHGlobalAnsi(s)).ToPointer();



 
Je connais pas ces APIs, mais à mon avis, StringToHGlobalAnsi te renvoies un objet qui se voit détruire dès que tu as fini d'exécuter cette ligne de code. Le pointeur retourné par 'ToPointer' n'est alors plus valide puisqu'il pointe vers le contenu d'un objet détruit.
 
Solution envisageable: déclarer un objet System::string (ou que sais-je) qui n'est détruit qu'une fois que tu as affecté le contenu à une std::string.


Message édité par Lam's le 16-06-2005 à 15:13:56
n°1122065
ronin111
Posté le 16-06-2005 à 15:19:17  profilanswer
 

Lam's a écrit :

Solution envisageable: déclarer un objet System::string (ou que sais-je) qui n'est détruit qu'une fois que tu as affecté le contenu à une std::string.


 
merci Lam's mais ou dois-je déclarer cet objet System::String ?

n°1122105
Lam's
Profil: bas.
Posté le 16-06-2005 à 15:32:57  profilanswer
 

Ah bah non, j'ai dit des conneries, StringToHGlobalAnsi renvoie un pointeur. Ca doit être un problème de sécurité ou de gc alors. Désolé. :(

n°1122154
ronin111
Posté le 16-06-2005 à 15:56:02  profilanswer
 

Lam's a écrit :

Ah bah non, j'ai dit des conneries, StringToHGlobalAnsi renvoie un pointeur. Ca doit être un problème de sécurité ou de gc alors. Désolé. :(


merci tout de meme

n°1122179
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 16-06-2005 à 16:11:21  profilanswer
 

juste une question : est ce que l'objet os est initialisé avant d'être passé à la fonction ?


---------------
J'ai un string dans l'array (Paris Hilton)
n°1122195
ronin111
Posté le 16-06-2005 à 16:22:12  profilanswer
 

Harkonnen a écrit :

juste une question : est ce que l'objet os est initialisé avant d'être passé à la fonction ?


no je declare only une variable de std::string que je passe à la méthode

n°1122201
HelloWorld
Salut tout le monde!
Posté le 16-06-2005 à 16:24:48  profilanswer
 

Je pige pas le rapport avec l'erreur. :gratgrat:
Peut être un problème avec l'objet temporaire passé en paramètre, car tu ne passes par un String *, mais un char *.
Change ta chaine "123456789123456789" pour S"123456789123456789".
Elle a lieu où l'exception ?


Message édité par HelloWorld le 16-06-2005 à 16:25:24

---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°1122228
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 16-06-2005 à 16:45:14  profilanswer
 

ronin111 a écrit :

no je declare only une variable de std::string que je passe à la méthode


la voilà l'erreur à mon avis : tu passes une référence à un objet non initialisé


---------------
J'ai un string dans l'array (Paris Hilton)
n°1122248
ronin111
Posté le 16-06-2005 à 16:56:32  profilanswer
 

HelloWorld a écrit :

Je pige pas le rapport avec l'erreur. :gratgrat:
Peut être un problème avec l'objet temporaire passé en paramètre, car tu ne passes par un String *, mais un char *.
Change ta chaine "123456789123456789" pour S"123456789123456789".
Elle a lieu où l'exception ?


 
Bonjour
 
using namespace System::Runtime::InteropServices;
   const char* chars =  
    (const char*)(Marshal::StringToHGlobalAnsi(s)).ToPointer();
   ===> os = chars; en faite l'exception est levé ici :
   Marshal::FreeHGlobal(System::IntPtr((void*)chars));  
 
Il n'arrive pas à allouer et il me dirige sur cette ce fichier xmemory  et precisement la :  
 
 
  // xmemory internal header (from <memory> )
#pragma once
#ifndef _XMEMORY_
#define _XMEMORY_
#include <cstdlib>
#include <new>
#include <xutility>
 
#pragma pack(push,8)
#pragma warning(push,3)
 
 #pragma warning(disable: 4100)
 
#ifndef _FARQ /* specify standard memory model */
 #define _FARQ
 #define _PDFT ptrdiff_t
 #define _SIZT size_t
#endif
 
 #define _CPOINTER_X(T, A)  \
 typename A::template rebind<T>::other::const_pointer
 #define _CREFERENCE_X(T, A) \
 typename A::template rebind<T>::other::const_reference
 #define _POINTER_X(T, A) \
 typename A::template rebind<T>::other::pointer
 #define _REFERENCE_X(T, A) \
 typename A::template rebind<T>::other::reference
 
_STD_BEGIN
  // TEMPLATE FUNCTION _Allocate
template<class _Ty> inline
 _Ty _FARQ *_Allocate(_SIZT _Count, _Ty _FARQ *)
 { // allocate storage for _Count elements of type _Ty
 ==>return ((_Ty _FARQ *)operator new(_Count * sizeof (_Ty)));
 }
 
 

mood
Publicité
Posté le 16-06-2005 à 16:56:32  profilanswer
 

n°1122310
Lam's
Profil: bas.
Posté le 16-06-2005 à 17:19:34  profilanswer
 

Harkonnen a écrit :

la voilà l'erreur à mon avis : tu passes une référence à un objet non initialisé


Bah si il est initialisé. [:spamafote]
Il a un constructeur sans paramètres et toussa quoi.

n°1122769
HelloWorld
Salut tout le monde!
Posté le 17-06-2005 à 09:55:57  profilanswer
 

Si tu fais un cout de chars ça donne quoi ?


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°1202911
aparra
Posté le 20-09-2005 à 08:52:31  profilanswer
 

bonjour,
 
i was the same problem and can solve it changing the runtime library (project settings->c\c++\code generation) to /mdd.
In my case the problem was the mix of manage and unmanaged libraries.
 
This link splain  the diferents types of runtime library options (and more).
 
I hope this helps.
 
pardon par mon anglais mais mon français est pire (encore   ;) ), des salutations depuis Barcelone.
 
Àngel.

n°1202913
aparra
Posté le 20-09-2005 à 08:54:41  profilanswer
 

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Conversion System::String* en std::string

 

Sujets relatifs
conversion de caractère en date sous SQL servercomparer pour savoir si une String est différent d'une chaine
conversion de dates du VB au MySQL[C++]Existe t-il une fonction récupérant une partie d'un string?
Conversion Binaire Hexadécimalprobleme de conversion
y'a t il une fonction C qui remplace la fonction c++ string.replace?conversion php ==> pdf
conversion de PDF en JPEG en PHPconversion des requettes du sql en mysql
Plus de sujets relatifs à : Conversion System::String* en std::string


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR