Newsgroup: it.comp.programmare.win32
Titolo: [C++ Builder] string e String

Salve,
c'� un modo per far funzionare un codice simile?
string s = "ciao";
Application->MessageBox(s, "Saluto", MB_OK);
non accetta nemmeno s.c_str();
Visto che si parla di stringhe, ma come mai String in C++ Builder non � zero 
based? 

 Application->MessageBox(s, "Saluto", MB_OK);
Application->MessageBox ha come parametro un AnsiString e non uno
string, String o char*... verifica sull'help e vedrai. Non mi ricordo
l'include da mettere per le AnsiString ma dovresti trovarlo facilmente.
Devi scrivere:
AnsiString s = "ciao";


 Application->MessageBox(s, "Saluto", MB_OK);
Si, lo so che usa ansi string ma stavo utilizzando un codice che fa uso di 
string.
Ho trovato questo modo per convertire:
string s = "CIAO";
Application->MessageBox(AnsiString(s.c_str()).c_str(), "X", MB_OK);
Alla borland hanno avuto proprio una bella idea a introdurre questo tipo che 
oltretutto non � nemmeno zero based.
Era meglio che non si fossero mai occupati di C++ ma solo di Delphi, almeno 
la gente non avrebbe perso tempo con i loro prodotti. 

 
AnsiString ï¿œ una classe che serve a creare oggetti simili alle string, 
ma ï¿œ specifica per l'uso nella VCL.
Se non sei capace a programmare in VCL, esistono molti libri in commercio.
Se usi Google, trovi molta documentazione, ad esempio 
http://bcbjournal.org/articles/vol1/9708/An_AnsiString_class_reference.htm
Il metodo c_str() serve per leggere i dati dentro l'oggetto come fosse 
un array. Non capisco perchï¿œ continui a dire che non ï¿œ 'zero based', ï¿œ 
un oggetto, non un array!
A naso poi mi sembra meglio scrivere:
AnsiString as = s.c_str();
Application->MessageBox(as, "X", MB_OK);
 > Era meglio che non si fossero mai occupati di C++ ma solo di Delphi, 
almeno
 > la gente non avrebbe perso tempo con i loro prodotti.
 >
 >
Veramente, Borland ï¿œ stata una delle prime a mettere in commercio un 
compilatore C++. Delphi ï¿œ venuto dopo quando il Pascal aveva perso tutto 
il suo appeal.

 la gente non avrebbe perso tempo con i loro prodotti. 
Ti concedo che hanno portato un pï¿œ troppo letteralmente la VCL da Delphi
al C++, avrebbero dovuto adattarla al linguaggio che l'avrebbe
sfruttata. Ma probabilmente questo avrebbe significato riscriverla da
cima a fondo: se ï¿œ stata fatta per funzionare internamente con le
AnsiString, usare al loro posto le string STL avrebbe significato nï¿œ piï¿œ
nï¿œ meno che questo.
Il problema non sono le VCL in sï¿œ, ma ï¿œ proprio il fatto di usare un
framework: questo ti aiuta da una parte, ma ti obbliga da un'altra...
qualunque scelta avessi fatto (QTlib, MFC, ATL, WFC, WxWidgets ecc.) a
un certo punto ti saresti trovato piï¿œ o meno come sei ora, a smadonnare
perchï¿œ non puoi fare le cose come vuoi tu ma *devi* farle come dicono
loro :-)

 Application->MessageBox(as, "X", MB_OK);
No, la MessageBox vuole as.c_str(); 

 loro :-)
Ma infatti non mi lamento del framework in s�, ma dell'incompatibilit� con 
gli oggetti che sono parte di uno standard del linguaggio.
Un compilatore, per quanto possa aggiungere funzionalit�, per prima cosa 
deve essere conforme allo standard del linguaggio e se, come in questo caso, 
si implementa un tipo alternativo per sviluppare meglio usando la VCL, 
almeno si deve rendere tale tipo compatibile con quello gi� esistente.