Newsgroup: it.comp.lang.c++
Titolo: domande su c++ builder

Salve A tutti!
Mi stavo ponendo alcune domande sul c++ Builder..
1) come diamine si fa a trasformare una stringa ( proveniente da una edit per esempio) in un intero( dove sono finite le belle procedure tipo str2int?)?
2) come si fa a lanciare un programma all' interno di un sorgente( per esempio se volessi lanciare la calcolatrice di win quando viene premuto un bottone)
Grazie a tutti queli che mi rispondono.



...
    Salve A tutti!
    Mi stavo ponendo alcune domande sul c++ Builder..
    1) come diamine si fa a trasformare una stringa ( proveniente da una
edit per esempio) in un intero( dove sono finite le belle procedure tipo
str2int?)?
    In qualsiasi C/C++ c'e` la funzione atoi() che fa quello che chiedi:
    123ai -> 123,     ai123 -> 0
    2) come si fa a lanciare un programma all' interno di un sorgente( per
esempio se volessi lanciare la calcolatrice di win quando viene premuto un
bottone)
    system() in dos sospende il programma corrente ed esegue quello
chiamato. In Un*x esegue i due processi in parallelo.
    Per creare una dos shell ad esempio basta lanciare
    system("
command.com
");
    Grazie a tutti queli che mi rispondono.
    Non c'e` di che.
         Saluti
    Andrea Perazzolo
 
han...@bandit.sci.univr.it

...
    Salve A tutti!
    Mi stavo ponendo alcune domande sul c++ Builder..
    1) come diamine si fa a trasformare una stringa ( proveniente da una
edit per esempio) in un intero( dove sono finite le belle procedure tipo
str2int?)?
    2) come si fa a lanciare un programma all' interno di un sorgente( per
esempio se volessi lanciare la calcolatrice di win quando viene premuto un
bottone)
    Grazie a tutti queli che mi rispondono.

ancora WinExec.
1) Scusa se vi contraddico, Andrea e Giuseppe, ma a me sembra che usare la
funzione atoi col C++ Builder sia davvero una scemenza!!! Si è forse
dimenticata la classe AnsiString di cui è istanza TControl::Text (propietà
membro di TEdit)?!? Tale classe ha innumerevoli funzioni di manipolazione
(per non parlare poi dell'esistenza della classe String, estremamente
interessante!!!), quindi non credo proprio che continuare ad utilizzare le
funzioni atoi, atoil, ltoa, itoa e le altre (create per manipolare char* o
wchar_t* e non AnsiString) sia intelligente. Per fare un esempio pratico:
/* La seguente riga di codice dichiara la variabile x e la inizializza col
valore contenuto nel campo di editing Edit1 */
int x = Edit1->Text.ToInt();
/* Ora x contiene il valore intero presente in Edit1 (ricordarsi sempre che
assegnare valori che *potrebbero* non essere interi a un intero si risolve
spesso in un'eccezione di windows, se non si usano blocchi try e catch) */
2) Per quanto riguarda il secondo punto, devo ribadire che siamo sotto
Win95. Quindi, Andrea, utilizzare funzioni come system, spawn, exec e tutte
le derivate di queste è quantomeno obsoleto (non dico stupido, però non
conviene di certo usare funzioni studiate per il DOS sotto windows, e
tantomeno sotto Win32!!!). L'idea di usare le API di windows è la più
felice, anche se consigliare a uno che programma col C++ Builder
(ricordiamoci che stiamo parlando di Win95 only) di utilizzare WinExec "per
mantenere la compatibilità con le versioni precedenti di Windows" mi fa
davvero scappare da ridere! Però ho da ridire su CreateProcess: perchè mai
andare ad utilizzare una funzione complicata quando è disponibile
un'alternativa che è sia più semplice sia (soprattutto) più potente.
Utilizzando, infatti, ShellExecute, è possibile non solo lanciare un
qualsiasi programma esterno, ma è anche possibile lanciare file che non
siano programmi (*.bat, *.com, *.exe) utilizzando la shell di Win95. Tanto
per fare un esempio, è possibile lanciare un file wave (*.wav) lasciando a
windows il compito di aprire un programma in grado di riprodurre file
wave!!! Sam desiderava lanciare la calcolatrice... be' è sufficiente questo:
/* Dichiara la funzione ShellExecute */
#include <windows.h>
/* Lancia la calcolatrice (calc.exe) tramite ShellExecute. La calcolatrice
si troverà in normali condizioni (per modificare tali condizioni occorre
sostituire SW_SHOWNORMAL con qualche altro flag, ad esempio SW_SHOWMAXIMIZED
per farla apparire a tutto schermo) */
 ShellExecute(Handle, "open", "calc.exe", NULL, "", SW_SHOWNORMAL);
/* Se ShellExecute non sarà in grado di lanciare calc.exe non produrrà
alcuna eccezione, ma è importante capire che non restituirà l'handle di
calc.exe, bensì uno dei seguenti codici di errore:
0 -> The operating system is out of memory or resources.
ERROR_FILE_NOT_FOUND -> The specified file was not found.
ERROR_PATH_NOT_FOUND -> The specified path was not found.
ERROR_BAD_FORMAT The .EXE -> file is invalid (non-Win32 .EXE or error in
.EXE image).
SE_ERR_ACCESSDENIED -> The operating system denied access to the specified
file.
SE_ERR_ASSOCINCOMPLETE -> The filename association is incomplete or invalid.
SE_ERR_DDEBUSY -> The DDE transaction could not be completed because other
DDE transactions were being processed.
SE_ERR_DDEFAIL -> The DDE transaction failed.
SE_ERR_DDETIMEOUT -> The DDE transaction could not be completed because the
request timed out.
SE_ERR_DLLNOTFOUND -> The specified dynamic-link library was not found.
SE_ERR_FNF -> The specified file was not found.
SE_ERR_NOASSOC -> There is no application associated with the given filename
extension.
SE_ERR_OOM -> There was not enough memory to complete the operation.
SE_ERR_PNF -> The specified path was not found.
SE_ERR_SHARE -> A sharing violation occurred.
Scusa ma non avevo voglia di tradurre tutti i commenti, anche perchè non ti
serviranno (quasi) a nulla: o ti restituisce un handle valido, oppure è
chiaro che qualcosa è andato storto
*/
Spero di essere stato utile e chiaro, comunque sono disponibilissimo per
eventuali ulteriori chiarimenti.
Rodolfo Tedeschi - 
thet...@tin.it

bottone)
devi usare la funzione WinExec

Non vorrei creare una polemica, ma pertettetemi di precisare quanto segue:
1) non sapevo che esistesse tale proprietà in TEdit, poiché io uso il
Borland C++ e non il C++ Builder. Ho solo consigliato di usare la funzione
"atoi" poiché fa parte dello standard C. Inoltre, come da te affermato, atoi
usa il tipo wchar_t che è la base per il set di caratteri UNICODE. Non vedo
perché io (o qualunque altro) non debba usare le librerie di run-time, visto
che sono state
aggiornate (nel Borland C++) perfino per funzionare egregiamente con Win32 e
con Unicode, per dover usare le funzioni di Win32, specifiche solo di questo
ambiente.
2) Be', se è solo per attivare la calcolatrice allora Sam può usare WinExec,
visto
che richiede solo due parametri. Ho consigliato CreateProcess solo perchè è
la più completa da tutti i punti di vista, anche se ShellExecute è
utilizzabile al meglio se bisogna aprire i documenti (o qualunque file di
dati) più che eseguire applicazioni.
Se volete tagliare i ponti con il passato fatemelo sapere. Win32 ha portato
nuove funzioni che dovrebbero farmi dimenticare tutto ciò che ho imparato in
precedenza (prima di tutto l' Ansi C). So benissimo che C++ Builder può
compilare solo programmi per Win32, però penso che sia più proficuo per
tutti usare le
vecchie funzioni del C, giusto per una eventuale portabilità. E poi, non si
sa mai, come va a finire con Windows. Domani un fantomatico Windows a 64 bit
può
presentarci altre nuove funzioni belle e pronte da utlizzare. Cosa dovremo
fare, utilizzarle ciecamente o avremo il tempo di pensare se farne a meno?
Inoltre date un taglio per quanto riguarda qual'è il miglior compilatore, se
è meglio il Borland C++, se è meglio Visual C++ o C++ Builder. Ognuno di
noi, lo penso con umiltà, ha speso una vera fortuna per comprarsi un
compilatore e come se non bastasse, nel caso mio, è stato costretto anche ad
aggiornare il computer poiché tale compilatore è una vera bestia nera. Non
mi fate pentire di quello che ho fatto, pertanto non ci scanniamo se è
meglio una funzione oppure un'altra. Già Windows è un rompi..., poi se ci
mettiamo a fare la guerra.... vuol dire che siamo arrivati al capolinea.
Cordialmente.
Giuseppe Parrello
http://space.tin.it/computer/giparrel
jopa...@tin.it

Scusa se ti sono sembrato poco d'accordo con ciò che hai consigliato, è solo
che non mi sembrava il caso di usare funzioni di conversione di char* o
wchar_t* per le AnsiString quando già nella classe stessa (AnsiString) vi
sono funzioni migliori (da includere nell'eseguibile comunque, tra l'altro,
a meno che non si possa, tra le altre novità, linkare solo un pezzo di
classe :-) ).
Per quel che riguarda WinExec continuo a nutrire qualche dubbio sull'utilità
di quella funziomne, comunque...
E poi tagliare fuori Borland C++ è certamente fuori discussione - anche io
lo uso (il 4.51) per farmi delle DLL e scrivere magari con le MFC (perchè la
super-compatibilità del linker del c++ builder è pressochè inesistente se si
utilizzano le MFC)!
Ribadisco l'inferiorità del Vc++.
/*seguono insulti, minacce, occhiatacce sprezzanti verso di me dai lettori
microsoftiani...*/

microsoftiani...*/
sicuramente non da parte mia, di solito rispetto le opinioni di tutti,
anche se sinceramente il Borland C++ 4.x non mi e' piaciuto per nulla,
almeno come ambiente di sviluppo.
Gianpaolo Bottin
- Live Long and Prosper -

Giuseppe aveva accennato al VC++ per ciò che riguardava un confronto tra i
diversi compilatori attualmente disponibili, e il "ribadisco" mi è sfuggito
perchè dell'inferiorità del VC++, secondo il ***mio modesto parere***, ne
parlo spesso. Ma non ho la benchè minima intenzione di discutere su questo,
perchè secondo me ogni programmatore possiede esigenze diverse, quindi se
qualcuno ha bisogno, per un particolare progetto, di utilizzare Quick Basic
4.5, lo faccia pure. D'altra parte, per quel che riguarda il Borland C++
4.5, non credo proprio che si possa fare un paragone con VC++, perchè si
tratta di due cose molto diverse.
E comunque non mi sembra che Microsoft offra molta scelta sul campo dei
compilatori tipo il Borland C++ (e non C++ Builder) per Windows, oppure mi
sbaglio?

sbaglio?
beh, se si escludono gli strumenti rad, sia Borland che MS offrono un
solo ambiente di sviluppo C++ per cui mi pare che siano pari come
scelta, o dimentico qualcosa ?


scelta, o dimentico qualcosa ?
Come darti torto? E' cosě... scusa!
Rodolfo Tedeschi - 
thet...@tin.it

DOS, WIN16 e WIN32.
io infatti tendo ad utilzzare quando possibile la libreria standard C,
in alcuni casi pero' le funzioni di win32 non hanno un equivalente
oppure sono piu' flessibili, ad esempio la ShellExecute e la
CreateProcess ti danno una maggiore flessibilita' rispetto alla spawn.
