problem conversion char* -> string sous visual .net

problem conversion char* -> string sous visual .net - C++ - Programmation

Marsh Posté le 14-05-2004 à 11:00:59    


Salut a tous,
 
j'ai un petit probleme,
 
sous visual je crée un string a partir d'un char *, et lorsque la chaine de caractere depasse 16 caractere, je ne peut plus utiliser le string. pour des parametre de fonctions ou autres. Les operations de la classe string fonctionne mais des que je veux l'utiliser pour autre chose, ca ne fonctionne pas..
 
quelqu'un aurait une idée ?
 
 

Code :
  1. #include <string>
  2. #include <iostream>
  3. #include "JSeg.h"
  4. #include "explicit_templates.h"
  5. #include "def.h"
  6. using namespace std;
  7.    
  8. int main(int argc,char **argv)
  9. {
  10.         string name = "super_long_de_fichier.bmp";
  11. cout<<name<<endl; //Affichage ok
  12.         JSeg<RGBImage> * jseg = new JSeg<RGBImage>(name,16,2);
  13.         //fonctionne pas : la string vaut n'importe quoi
  14. jseg->run(0,false,true,true,true);
  15. cout<<endl<<endl;
  16. system("PAUSE" );
  17. return 0;
  18. }

Reply

Marsh Posté le 14-05-2004 à 11:00:59   

Reply

Marsh Posté le 14-05-2004 à 11:05:07    

Code :
  1. JSeg<RGBImage> * jseg = new JSeg<RGBImage>(name,16,2);


 
 
JSeg il prendrait pas un char* en paramétres ???
si c'est le cas :
 

Code :
  1. JSeg<RGBImage> * jseg = new JSeg<RGBImage>(name.c_str(),16,2);


Reply

Marsh Posté le 14-05-2004 à 11:14:57    

Même s'il accepte une std::string ça peut merder, il suffit que ce soit une dll compilée avec une STL différente de celle qu'il utilises...

Reply

Marsh Posté le 17-05-2004 à 16:26:10    

non c du string
 
mais ca marche pas
 
la classe <string> sous visual.net, c bine la meme que sous linux ?

Reply

Marsh Posté le 17-05-2004 à 16:46:40    

C'est quoi ton <JJSeg<RGBImage>?
Et c'est quoi les paramètres (name,16,2);
name : c'est le nom du fichier.
Mais les autres (16 et 2) ça correspond à quoi?

Reply

Marsh Posté le 17-05-2004 à 16:53:52    

HelloWorld a écrit :

Même s'il accepte une std::string ça peut merder, il suffit que ce soit une dll compilée avec une STL différente de celle qu'il utilises...


 
Tu veux dire qu'en regle générale il vaut mieux éviter de s'échanger des objets STL entre librairies?

Reply

Marsh Posté le 17-05-2004 à 17:31:26    

Citation :

la classe <string> sous visual.net, c bine la meme que sous linux ?


C'est la même en terme de focntionnalités. En terme d'implémentation, c'est même pas la même entre VC++6 et VC++.Net...

Citation :

Tu veux dire qu'en regle générale il vaut mieux éviter de s'échanger des objets STL entre librairies?


C'est un problème connu avec la STL. Tu compiles ton code qui utilise une std::string implémentée d'une certaine manière. Un mec utilise ta dll, et lui file une autre std::string implémentée différement. Le compilo n'y voit que du feux. A l'exécution c'est autre chose.

Reply

Marsh Posté le 18-05-2004 à 08:19:25    

Helloworld, comment tu fais pour contourner ce probleme ? faut recompiler la lib ? et si on a pas acces a la lib , c foutu ?
 
ah pis choupinou, Jseg<RGBImage> c un algo de segmentation : et la je bosse sur des images RGB. 16 c la quantification effectué sur l'image et 2 l'echelle pour la segmentation.


Message édité par vince_223 le 18-05-2004 à 08:22:52
Reply

Marsh Posté le 18-05-2004 à 09:08:48    

Code :
  1. Helloworld, comment tu fais pour contourner ce probleme ? faut recompiler la lib ? et si on a pas acces a la lib , c foutu ?


Mouais, recompiler la lib. J'ai ce problème avec QT sous Windows (pas le source, juste la dll). J'ai du code C++ standard, et j'y greffe une IHM QT. Cool, ils ont prévu une conversion std::string -> QString... boum, plantage.
Du coup, ben, c'est des appels à c_str().


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 18-05-2004 à 14:11:45    

oui, mais moi le pb c la classe string qui deconne
 
g passé ma matinée a passer tout mon code de string a char * et c le point d'entrée a la lib Magick++ qi plante.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed