Win32API
1) Cosa sono?
Sono un metodo usato per richiamare in ruby delle funzioni di una DLL (Dynamic-link library) e integrarle nel proprio programma/gioco.
2)Perché si usano?
essenzialmente perché richiamando le funzioni delle DLL di windows si può fare quasi tutto: gestione grafica, audio, gestione di finestre, avvisi, accesso a internet, controllo tasti, ecc...
3)Ma se sono così potenti, perché vengono usate così poco?
perché sono allo stesso tempo utili, numerose e incasinate alla follia: hanno una sintassi difficile, scomoda e con poca documentazione (per ruby è totalmente assente, se non qualche articolo qui e là). Questo obbliga ad sfruttarle solo come ultima risorsa.
4)Come funzionano?
la sintassi è questa:
# impostazione della dll api = Win32API.new("DLL", "funzione", quanti e che tipo di valori vanno passati, tipo di output) #richiamo del comando api.call(valori da passare)-DLL è il nome della dll (ma va)
-"funzione" è il comando da richiamare
-"quanti e che tipo di valori vanno passati": il tipo di valori si identifica grazie a delle sigle ( P = stringa, I = numero intero, L = espressione, V = valore vuoto, usato per l'output )
per esempio se dovessimo passare una stringa e un numero scriveremo "PI"
- tipo di output è il valore che la dll restituirà: funziona allo stesso modo, solo che ne può essere restituito solo uno (ovviamente)
un esempio:
@@mltmd = Win32API.new('winmm', "mciSendString","PPII","I") @@mltmd.call("open filename alias test", "null", 0, 0)
ecco un elenco rapido delle dll più usate:
KERNEL32.DLL -> funzioni base, di basso livello, come la gestione dei task, memoria, controllo tasti
USER32.DLL -> gestione delle finestre, dei messaggi d'errore ecc...
GDI32.DLL -> tutto ciò che ha a che fare con l'output dei dispositivi
COMDLG.DLL, LZ32.DLL, VERSION.DLL -> Supporto per le finestre di dialogo comuni, la compressione dei file e il controllo della versione. In alcuni casi sono accessibili direttamente in altri è necessario ricorrere alla APIGID32.DLL
ODBC32.DLL -> fornisce un API standard per diversi tipi di DataBase.
COMCTL32.DLL -> Implementa il nuovo gruppo di controlli delle finestre (elenco ad albero, ecc.)
MAPI32.DLL -> permette di operare sulla posta elettronica.
NETAPI.DLL ->Funzioni di accesso e controllo delle reti.
WINMM.DLL -> Funzionalità multimediali di un sistema. (riproduzione filmati, musiche ecc...) (NON SUPPORTA DVX)
per documentazione (incompleta e incomprensibile ^^):
http://www.microsoft...dn/default.mspx
4)Come capirci qualcosa e semplificare l'utilizzo
di solito per semplificare l'utilizzo delle dll ai comuni mortali (ma anche a se stessi, per evitare di riscrivere tutto il casino ogni volta) di solito si creano delle classi o dei moduli che fanno corrispondere i loro metodi a funzioni richiamate con le api.
un esempio:
Spoiler