Newsgroup: it.comp.lang.c++
Titolo: Windows e C++

A parer vostro, qual č la strada migliore, piů efficiente, piů
sviluppabile e controllabile per realizzare applicazioni per Windows
95 tramite il C++? Un pacchetto in particolare, come quello delle
classi MFC, o OWL, oppure un'approccio diretto alle API?
Pietro

Naturalmente dipende molto da cosa devi fare.
Io ho esperienza di sviluppo con le API e con la libreria MFC inclusa con i
compilatori Microsoft.
La libreria MFC ha una quantita' di classi impressionante per fare un po' di
tutto. E' nata soprattutto per scrivere applicazioni che si basano sul
concetto di "documento" (tipo Word o Paintbrush per intenderci) e
"rimappano" tutte le funzioni delle API.
Il vantaggio di MFC e' che semplificano molti lavori soprattutto quelli piu'
difficili tipo l'antemprima di stampa, la stampa stessa, aderenza allo
standard OLE ed altri.
Per altri versi MFC aggiunge un livello di "complessita'" ed alcune
restrizioni soprattutto per quanto riguarda il multi-threading. Io ho
sperimentato, ad es., molte stranezze nella gestione delle socket.
Per quanto riguarda le API (che ho riscoperto dopo qualche tempo passato con
MFC) posso dirti che hanno l'indubbio vantaggio di non darti alcuna
restrizione (se non quelle di sistema).
Un grosso svantaggio che vedo e' che non essendo classi C++, ma funzioni C,
non ti permettono di utilizzare appieno ereditarieta' e le altre belle cose
dell'object-orienting. A meno di non scriversi delle classi apposta!
A presto,
Angelo.



...

Secondo me e` l'uso di un framework (il VCL di Borland C++ Builder,
le MFC di Visual C++, o altri ancora), ma altri la pensano in modo
diverso -- ti consiglio di dare un'occhiata a 
http://www.relisoft.com
per "sentire l'altra campana" (uno che detesta i framework e ama
le API nude, che si veste lui di C++ come e quando gli serve, e
scrive ottimi tutorial su come fare almeno nei casi semplici).  Ma,
per me, anche se rispetto i suoi argomenti, non li trovo pienamente
convincente -- un framework contiene TANTA funzionalita` gia`
fatta, pronta, e riusabile... perche` non trarne beneficio?
Quale sia il framework migliore... passo!  VCL, e C++Builder 3 in
generale, e` certo molto buono; MFC e` piu` diffuso, e trovi un
mucchio di libri, esperti, roba gratis in rete, add-on commerciali,
ecc ecc -- come *progetto*, ha seri problemi, ma proprio perche`
e` cosi` diffuso e ormai "stabile" (novita` vere non glie ne mettono
ormai da anni) i bachi di implementazione li hanno ormai piu` o
meno tolti tutti.  OWL sembra sul viale del tramonto, ahime`:-(.
C'e` uno splendido framework gratuito chiamato VWCL, ma non
mi sentirei mai di consigliarlo a chi non sia MOLTO familiare
con le "API nude".  La maggior parte degli altri framework
soffrono di un tentativo di essere portabili fra Windows e altri
ambienti -- se ti interessa SOLO Windows, questo rischia di
darti delle complicazioni che potresti altrimenti evitare.
Personalmente, uso MFC, per mero e vile pragmatismo (anche
se come progetto *NON* mi piace poi molto...), e se dovessi
passare a qualcosa, "per me stesso", sarebbe VWCL -- ma
questo e` perche` tanto ormai le API le conosco fin troppo bene,
per cui... chi partisse da zero, invece, avrebbe potenzialmente
grossi vantaggi a NON studiarsi le API piu` di tanto, e il VCL fa
un buon lavoro a "schermarti" da esse (purtroppo e` scritto in
un altro linguaggio, Object Pascal e non C++, per cui capire i
suoi sorgenti ti obbliga a studiarti anche quell'altro linguaggio;
forse l'unica seria e importante considerazione negativa per
chi conosca solo C++ e non sia molto motivato a imparare
altri linguaggi differenti).
Alex


Secondo me non esiste una soluzione ottimale per sviluppare qualsiasi tipo
di applicazione; se devi sviluppare applicazioni con un'interfaccia utente
parecchio complessa, accesso ai database o utilizzo di COM/OLE, l'utilizzo
di framework come MFC o OWL (che non ho mai utilizzato) generalmente
comporta un overhead in termini di dimensioni del codice e occupazione di
memoria. MFC, in particolare, č sviluppata attorno al concetto di
documento/vista che puň risultare inadatto per alcuni tipi di applicazioni.
L'utilizzo del framework puň comportare limitazioni nell'utilizzo del
multithreading o implementare solo una parte delle funzionalitŕ fornite
dalle API "sottostanti" e non č sempre facile integrarlo con altre librerie.
La programmazione diretta via API č sicuramente piů complessa e, essendo
orientata al C e non al C++, porta a sviluppare codice un po' piů
"pasticciato" ma permette di sviluppare programmi piů "snelli".
Personalmente preferisco utilizzare direttamente le API per sviluppare
programmi di piccole dimensioni o moduli "di sistema", senza interfaccia
utente, e realizzare con MFC (o, addirittura con Visual Basic) i moduli piů
orientati all'interazione con l'utente.
Tieni presente qualsiasi framework si basa sulle API e che quindi un minimo
di dimestichezza con queste ultime ti puň sicuramente essere utile.
---
Valter Minute
min...@fortech.it
 (the reply address of this message is invalid)
---
Are you looking for a good freeware ScreenSaver? Try FOYD!
http://hotfiles.zdnet.com/cgi-bin/texis/swlib/hotfiles/getit.bin?fcode=000PZ
0
if you want, I can send you the (free) C++ source code.

orientati all'interazione con l'utente.
Gia`, questo e` da tenere presente, e mi dispiace non
essermi ricordato di dirlo nella mia precedente risposta: a
meno che "non te l'abbia ordinato il dottore", puo` benissimo
darsi che C++ *NON* sia la scelta migliore per lo specifico
compito di "fare la GUI" -- Visual Basic, per questo lavoro,
e` facilissimo da usare, e altri ambienti come Delphi e VJ++
non gli sono affatto lontani; il "motore" dell'applicazione puoi
benissimo farlo egualmente in C++, come collezione di
componenti COM (anche con interfacce custom, col VB6
di oggi; non sei _obbligato_ a limitarti ad Automation!), e
in VB (o altro) tenere solo un minimo di logica, delegando
agli opportuni componenti COM tutti i lavori "pesanti".
Se decidi che lo specifico lavoro che vuoi fare in C++ e`
proprio quello di scrivere componenti COM, allora mi
sento di raccomandarti senza altre riserve il VC++6 con
la relativa ATL 3.0 a corredo; ATL, la ActiveX Template
Library, e` uno *splendido* framework per lo specifico
lavoro di fare serventi (cioe` componenti) COM (e in
varie tecnologie che posano su COM, come ActiveX).
(Naturalmente e` indispensabile conoscere bene C++,
COM, l'ambiente stesso, un tot di API Windows, ecc; se
no, potresti trovarti meglio con VB6, VJ++6, o altri
simili linguaggi, anche per questo compito, anche se
i componenti che farai non saranno magari proprio
altrettanto potenti/flessibili/piccoli/snelli/ecc ecc).
[Non ho visto ancora testi su ATL 3.0, ma, sulla versione
precedente, la 2.1, ce ne sono almeno due buoni: "Active
Template Library, a developer's guide" di Armstrong,
ed. M&T Books; e, autori vari, "Beginning ATL COM
Programming", ed. Wrox Press -- merita averli
tutti e due, oltre a "Inside COM" (Microsoft Press)
come introduzione, e "Essential COM" di Don Box
per le cose avanzate/sottili/difficili].
Alex