Newsgroup: it.comp.programmare.win32
Titolo: Imparare a programmare sotto win 32

Salve, ho buone conoscenze del linguaggio C/C++ e vorrei programmare
applicazioni per windows.. Ho cominciato a vedere qualcosa, cioè di come il
programma interagisca con il sistema operativo ed ho visualizzato una
semplice finestra vuota.. Però programmare solo con le API mi sembra un pò
un'impresa.. secondo voi cosa dovrei fare? E' meglio che mi impari un
linguaggio più adatto a queste cose come ad esempio il Visual Basic?
Esistono libri elettronici (anche in inglese) da scaricare? Grazie a tutti,
bye

 - Sito Web di Shout 2001

Esistono libri elettronici (anche in inglese) da scaricare? Grazie a tutti,
se vuoi imparare le API Win32 il meglio č il C + il Petzold
(Programmare in Windows 5a versione, di Charles Petzold,
www.charlespetzold.com
)
Altrimenti ti consiglio il Delphi o se vuoi... .NET e tutto ciň che ci
gira intorno :)
--
Lawrence "Rhymes" Oluyede
rhy...@myself.com

per favore riduci la tua firma :)


 ha scritto nel messaggio
news:amaf7uc49cfk7ptmd...@4ax.com...


con le API Win32? Ciao
1 - quota in modo corretto per favore :)
2 - no, dipende da cosa vuoi fare...cmq impara il Delphi se vuoi e le
API le puoi usare anche li


 ha scritto nel messaggio
news:d6cf7ucs8137tarmn...@4ax.com...


Scusa la mia ignoranza, ma che vuol dire che devo quotare in modo corretto?
1 - riporta il testo del messaggio solo se per rendere più chiara la
tua risposta se no cancellalo
2 - scrivi _sotto_ il messaggio e non sopra


con le API Win32?
Un po' soprattutto se il programma è molto grosso ma IMO è molto
istruttivo.
-- 
Marco Barisione (ICQ 84277092)

 del programma è particolarmente pesante.
Questa tecnica la uso spesso anche io,  tu come hai risolto il problema
della comunicazione fra la dll e il resto del prog durante l'esecuzione
della stessa?
Mi spiego:
per tornare al tuo esempio, hai una dll che esegue compressione di dati, per
esempio le passi il nome del file da comprimere e il nome del file
destinazione, al termine della chiamata (che potrebbe durare minuti se il
file è abbastanza grosso) avrai il file compresso.
Ma se durante l'esecuzione della funzione tu mettessi in qualche variabile
della dll una percentuale di avanzamento, come la leggeresti da VB?
E' necessario per forza passare alla dll l'indirizzo di una variabile
dell'applicazione VB e farle scrivere lì il valore?
Con una dll Activex il tutto si risolverebbe con la creazione di un metodo
pubblico, ma preferei usare semplici dll con meno dipendenze e più compatte.
Saluti,
Luca Barbetta kck/skd

 
Se parti dal presupposto di sviluppare in C++ non devi necessariamente 
sviluppare ActiveX (intesi come controlli completi). 
Con ATL puoi sviluppare oggetti COM (e anche controlli ActiveX, se 
serve) molto compatti e senza dipendenze di sorta, in modo semplice.
-- 
Valter Minute
min...@inwind.it
 (the reply address of this message is invalid)

 file è abbastanza grosso) avrai il file compresso.
Se devi solo visualizzare lo stato di avanzamento, una tecnica consiste
nell'usare un picturebox con hdc persistente (ponendo hasDC=true) 
e passare l'hdc alla DLL in modo che possa scrivere su di esso (dopo
aver verificato che l'hdc e' valido).
Un altra alternativa e' scrivere la DLL in modo che invece di operare
direttamente sui file operi su buffer o che riceva almeno lo stream di input
tramite chiamate successive da VB che gli passano blocchi di byte
in questo modo hai il controllo totale dello stato di avanzamento
(sia in termini di visualizzazione delle informazioni che di controllo
 del processo).
Per esempio, nel caso di un compressore di dati o di un codificatore
si potrebbe usare un interfaccia verso la DDL del tipo
"oggetti ed handle":
/* Routine di apertura compressor_context:
   Riceve in input il file di output e restituisce
   un numero negativo che indica il tipo di errore 
   oppure un handle valido per identificare il contesto
   N.B. e' consigliabile che l'handle sia composto da un indice 
        e da un CRC con informazioni "gestite dalla DLL"
        in modo tale che il codice della DLL possa accorgersi
        se un programma le sta passando handle non validi
*/
int OpenCompressor(char *filename); 
/* Routine di invio dati al compressore:
   restituisce un numero positivo corrispondente ai BYTE DEL BLOCCO
   EFFETTIVAMENTE PROCESSATI entro lo scadere di timeout
   oppure
   restituisce un numero negativo che identifica una certa
   condizione di errore
*/
int WriteBlock(int handle,void *ptr_block,size_t block_size, time_t timeout);
/* Funzioni per  il controllo dello stato di avanzamento
   da chiamare tra una scrittura e l'altra */
int TotalInputSize(int handle);
int TotalCompressedSize(in handle);
int CompressorStatus(int handle);
/* Chiusura del compressor_context */
int CloseCompressor(int handle);
In pratica fai finta di implementare un file system speciale
tramite la DLL, con una certa interfaccia che ti permette
di operare su tali "file speciali" (potrebbero essere file veri
e propri come nel caso del compressore, ma anche qualcosa d'altro).
E' la vecchia metafora "tutto e' un file" dei sistemi Unix, sembra una
tecnica obsoleta, ma e' molto efficiente, semplice e portabile
(anche perche se ci si pensa, si tratta di una forma  di programmazione 
 ad oggetti indipendente dal linguaggio).
Senza contare che in questo modo il debug della DLL E dell'APPLICAZIONE
e' piu semplice (con la DLL puoi vedere se l'applicazione "rispetta
l'interfaccia", dall' applicazione puoi controllare se la DLL
risponde in modo corretto analizzando lo stato del compression_context).
L. Micheletto

 ha scritto nel messaggio
news:3C7D533A...@libero.it...
Grazie a tutti per i consigli.
Saluti,
Luca Barbetta kck/skd

Io ho risolto il problema dello stato di avanzamento con una callback.
Con VB5 non ho il minimo problema!
In pratica la funzione che comprime chiama un procedura ogni punto
percentale completato, così il controllo passa a VB e si può anche
abortire l'operazione a metà.
P.S: scusa se non ho risposto prima.


Te lo ripeto, riduci la tua firma per favore


 gira intorno :)
E il Borland C++ Builder no???? Mi sembra la risposa più naturale da dare a
chi conosce bene il C++ ma non vuole avventurarsi troppo nelle API né in
complessi framework ma desidera un approccio più "visual".
Tra il dev-c++ e le api di windows e .net in mezzo esistono parecchie cose,
ottime sono Delphi e Borland C++ Builder, dato che il nostro amico conosce
già bene il C++ ma poco windows, mi pare che non ci siano troppi dubbi.

complessi framework ma desidera un approccio piů "visual".
mi ero dimenticato che conoscesse il C++... :)


 non è il caso di reinventare la ruota :)
Concordo con te, ma colgo l'occasione per chiederti: tu cosa
consiglieresti
per imparare a programmare (non usare) oggetti COM. Qualche libro,
articolo etc...
Utilizzo VC++6 e tendo a programmare con win32 APIs, ma me la cavo anche
con le MFC.
Ottima conoscenza C e C++. (tuttavia minima conoscenza COM).
Grazie,
Tommy
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 
www.charlespetzold.com
)
Concordo con te, il miglior libro (introduttivo) sulle win32 API in C e'
sicuramente il Petzold.
Tuttavia se la domanda originale era come programmare in C/C++ windows,
esistono anche le MFC.
Il miglior libro introduttivo in materia e' il Prosise.
Programmare in C/C++ con le Win32 APIs a mio avviso e' piu' semplice che
con le MFC (wizard a parte),
tuttavia richiede piu' tempo, ci sono piu' linee di codice da dover
scrivere!
Il tempo e' denaro, no?!? Ad ogni modo scrivere una applicazione in C
con le API e' meno faticoso
di quanto ti possa sembrare ora che sei all'inizio. (si, ricordo anche
io che effetto mi facevano tutte
quelli righe di codice solo per visualizzare un finestra!!!)
VB, non e' un linguaggio che mi piaccia molto, (devo ancora vedere
VB.NET
!),
Delphi, anche se non mi piace la sintassi Pascal-like, credo sia per
molto aspetti
superiore a VB.
Non sono molto concorde con alcune persone su questo NG che sviluppano
applicazioni in VB e poi
chiamano DLL scritte in C++. Personalmente, specialmente se paragonato a
VC++ con MFC, oppure con al Builder, non trovo davvero
questo processo meno time-consuming, anzi! (con le API il discorso
cambia).
Ad ogni modo, puo' essere utile in ditte dove ci sono pochi
programmatori C++ che sono in grado di
svolgere compiti "difficili" ed invece alcuni programmatori VB (un
pochino meno esperti) che possono limitare a pensare alle interfaccie
utente.


 complessi framework ma desidera un approccio più "visual".
Concordo, il Builder e' sicuramente piu' facile rispetto alle API nude e
crude,
e persino rispetto a VC++/MFC*. Personalmente preferisco VC++ (qua
rischia di iniziare una
guerra), ma per iniziare devo ammettere che il builder credo sia davvero
piu' indicato.


 
Per realizzare oggetti COM ti consiglio di utilizzare ATL.
Potrai trovare dei tutorial su 
www.codeproject.com
. Come testo io ho 
apprezzato l'approccio di "Developer's workshop to COM and ATL 3.0" di 
Troelsen che parte da un'implementazione "pseudo-COM" con C++ per 
introdurre prima COM e poi ATL.
