Introduzione alle API Win32, Parte 1/6
di Mastersgn, del 18 ottobre 2006 C/C++
Proponiamo ai lettori questo primo capitolo di introduzione alle WinApi a 32 bit, in modo da affrontare con più certezza il restante tutorial. Verranno chiariti concetti di base sui tipi di dati e faremo qualche considerazione sull'ambiente di sviluppo scelto. Per utenti che possiedono già esperianza, questa parte può essere saltata. Tuttavia, presentiamo alcune considerazioni sulla stesura del codice e dello stesso tutorial che si riveleranno utili nella lettura degli articoli successivi.
Introduzione
In questa guida impareremo ad usare le API (Application Programming Interfaces) di Microsoft Windows in modalità 32 bit. Il linguaggio di sviluppo scelto è il C, ma se utilizzate il C++ non incontrerete particolari difficoltà nel comprendere e seguire gli articoli (infatti, le chiamate alle funzioni sono le stesse). Piuttosto, è probabile che C++ vi offra qualche possibilità in più; per cui non dovrebbe esservi difficile modificare quelle piccole parti di codice che dovessero risultare non adeguate.
Requisiti software
Come IDE (Integrated Development Environment) useremo il Dev-C++ della Bloodshed, scaricabile gratuitamente dal sito del produttore (www.bloodshed.net/devcpp.html).
Se utilizzate un altro IDE/compilatore, anche in questo caso non dovrebbe cambiare molto. Sarà sufficiente indicare al compilatore dell'IDE che si sta compilando un'applicazione Windows GUI e non una CUI in generale. Dopodiché, siccome ogni ambiente ha le proprie particolarità, dovrete gestirle personalmente.
Siccome un programma per Windows32 normalmente ricorre alle "librerie di connessione" al sistema (specificamente almeno le tre "canoniche":
kernel32.lib
,gdi32.lib
euser32.lib
) potrebbe essere necessario installare il Platform SDK, scaricabile dal sito Microsoft.Come usare questa guida
Questo tutorial sarà suddiviso in capitoli. Se avete la tentazione di saltare porzioni del tutorial, vi chiedo di avere pazienza e leggere comunque ogni articolo per intero. Questo perché in quelle parti che potreste saltare, potrebbero esserci proprio le risposte alle domande che vi porrete in seguito.
Se doveste trovare errori logici nel corso del tutorial o avete domande in merito, potete contattarmi via e-mail.
Cosa dovete aspettarvi
Win32 utilizza molte macro e
typedef
definite all'interno del filewindows.h
, che verrà sempre incluso. Quindi, soprattutto se siete agli inizi, potreste restare disorientati di fronte alla quantitità di nuovi tipi e costanti; ma col passare del tempo vi risulteranno sempre più familiari.Ovviamente, programmando in C definiremo le variabili all'inizio di ogni blocco e non solo dove servono come si potrebbe fare in C++ (coloro che programmano in C++ saranno comunque liberi di farlo). Per la stessa ragione racchiuderemo i commenti tra
/*
e*/
(mentre in C++ potrete usare i soliti commenti in linea, preceduti da//
).Per migliorare la leggibilità della guida, potrebbe accadere che faccia distinzione tra procedure e funzioni, anche se nel linguaggio C - come sapete - sono considerate tutte funzioni.
Ultima nota: molte delle funzioni che troverete in questo tutorial, sono spiegate più approfonditamente nella documentazione in linea di MSDN dedicata a questo argomento. Su MSDN, trovate spiegazioni accurate di tutte le funzioni, i tipi, le strutture e gli altri oggetti di cui faremo menzione.
Un breve sguardo sui tipi utilizzati
Per prima cosa, sarebbe oppurtuno spiegare a cosa corrispondono e come ragionare con diversi tipi di dati che useremo nei nostri esempi. Diamo quindi un'occhiata ai primi:
- UINT -> unsigned int
- LPSTR -> char*
- PVOID -> void*
- ULONG -> unsigned long
- CHAR -> char
- CONST -> const
- INT -> int
- LONG -> long
- VOID -> void
- WORD -> unsigned short
- HANDLE -> PVOID
- HMENU -> HANDLE
- HRESULT -> LONG
Questi tipi sono i più basilari ed intuitivi. Vi invito ad analizzare sempre i nomi degli oggetti con cui avrete a che fare studiando le API, perchè impararli semplicemente a memoria come dato di fatto non sarebbe molto profittevole.
Come vedete, molti nomi sono identici ai tipi solitamente usati ma scritti in maiuscolo. Se preceduti dalla lettera
U
stanno a significare un tipo senza segno (unsigned). AnalizzandoLPSTR
osserviamo subito che è un puntatore ad una stringa e cheLP
sta per long pointer.STR
, invece, facile immaginarlo... Nello stesso modo se consideriamoPVOID
,P
sta per pointer eVOID
per "vuoto". Se mettiamo unaC
per esempio all'interno diLPSTR
, otteniamoLPCSTR
, che sta ad indicare una costante; nel senso che è un puntatore ad una stringa costante che non verrà quindi modificata. OsservandoHANDLE
notiamo che corrisponde ad unPVOID
; ci accorgeremo che molti di questi tipi saranno usati spesso. A sua voltaHMENU
corrisponde adHANDLE
, e così via per molti altri tipi.Non è ancora il momento di analizzarli tutti. Penso che abbiate capito il modo in cui vengono gestiti in generale e col tempo ci farete l'abitudine. Tengo a precisare che molti tipi che non ho indicato qui, li spiegherò nel corso del tutorial (ma ci dovrete arrivare da soli ragionandoci). Se avete bisogno di maggiori delucidazioni sui tipi di dati, consultate il capitolo Windows Data Types nella referenza MSDN già citata.
Ultima cosa: può darsi che nel vostro codice siate abituati ad usare il solo
char*
al posto di unPCHAR
. Per svariati motivi - sui quali non ci dilunghiamo in questa sede - ciò non è consigliabile. Perciò, nel codice degli esempi useremo semprePCHAR
.Ultime considerazioni
Dovreste entrare nell'ottica di separare mentalmente le API dalla solita programmazione CUI, comprendendo bene che sono due cose diverse. Lasciando stare l'esattezza della mia affermazione, questo è utile per non confondersi (ed uno dei motivi a cui accennavo prima per i tipi).
Seconda cosa: non dovrete includere come libreria di I/O la
stdio.h
ma lawindows.h
(col classico#include <windows.h>
). Quindi per ciascuna funzione di lettura/scrittura di cui dispone la prima libreria (tipoprintf()
,scanf()
) ne saranno presenti una o più nella seconda. Quando definiremo la macroWIN32_LEAN_AND_MEAN
(#define WIN32_LEAN_AND_MEAN
) indicheremo di utilizzare solo le funzioni più comuni della libreriawindows.h
, accellerando la compilazione del nostro codice.Bene, siamo finalmente pronti per iniziare con il codice vero e proprio, nel prossimo articolo.
Nessun commento:
Posta un commento