Newsgroup: it.comp.java
Titolo: pointers

Ma java gestisce i pointers?
E se no,  come gestire eventualmente le api di windows?

 E se no,  come gestire eventualmente le api di windows?
Java utilizza costantemente i puntatori (tranne che con i tipi
primitivi), solo che li chiama reference.
Sono diversi dai puntatori del C in quanto non permettono l' aritmentica
dei puntatori, non permettono di sapere l' effettivo indirizzo di
memoria a cui puntano e hanno sempre un tipo definito. Forse ci sono
altre differenze, ma conoscendo molto poco il C non so dirti.
Logicamente comunque sono la stessa cosa: una variabile che continene un
indirizzo di memoria.
Per trafficare sotto win usa il SDKJ della M$.
Di piu' non so dirti.
Ciao

E se no,  come gestire eventualmente le api di windows?
Oltre a quanto sopra accennato, puoi pur sempre decidere
di usare un intero per memorizzare puntatori tornati dalle
API.  "Usare puntatori nudi elimina molti dei vantaggi di
sicurezza di Java.  Usate altri approcci se appena possibile.
Ci sono pero` situazioni in cui potete scegliere di usare
puntatori nudi".  Per facilitare questa scelta, Microsoft
offre il metodo statico DllLib.ptrToStruct, cui passi
l'oggetto class di una struttura (una classe @dll.struct)
e un intero (che contiene un "puntatore nudo"), e ti torna
l'intero "visto come" puntatore a data struttura (riferimento
a Object, castabile alla classe della struttura); e vari altri
metodi statici, sempre in DllLib, per copiare dati di vario
tipo a e da l'area di memoria indicata da un puntatore
nudo (DllLib.ptrToStringAnsi, ecc ecc).
Se non vuoi usare le estensioni Microsoft, naturalmente,
devi scrivere tu tanto C, a standard JNI, per "rivestire"
qualsiasi libreria esistente che t'interessi interfacciare a
Java (le API di Windows, come qualsiasi altra libreria); se,
in quest'ambito, osservi la necessita` di usare qui e la`
"puntatori nudi", puoi anche scegliere di aggiungere tu
stesso, fra i tuoi metodi native scritti in JNI, metodi statici
simili a quelli appena delineati, per facilitare la gestione
dei "puntatori nudi" in questione.
Alex

E se no,  come gestire eventualmente le api di windows?
se usi le api di windows non crei programmi cross-platform
devi usare le librerie di classi messe a disposizione dalla Sun,
(swing j3d jfc ecc ecc.....).
Le chiamate alle API (se l' applicazione gira sotto windows) le fa la
jvm al posto tuo.
bye..

E se no,  come gestire eventualmente le api di windows?
Le estensioni Microsoft per la connessione da Java
alle API di Windows (e qualsiasi altra DLL), dette
J/Direct, usano diversi approcci.  Ad esempio, dove
una chiamata delle API prende un puntatore per
metterci semplicemente dentro un risultato (come
la GetDiskFreeSpace, che ha fra gli argomenti 4
puntatori a DWORD appunto per questo), passerai
in corrispondenza a quell'argomento un array di
un solo elemento.  In altri casi, puoi usare degli
int come "puntatori crudi" ("raw pointers"), e una
classe ausiliaria chiamata com.ms.dll.DllLib
contiene metodi statici (copy() in molti overload,
e vari altri) per usarli "come puntatori".
Secondo lo standard Sun, invece, non c'e` nessun
modo di interfacciare _direttamente_ Java a una
qualsiasi DLL esistente (che sia delle API Windows,
o di qualsiasi altra natura); se vuoi attenerti a
questo standard, dovrai dunque scrivere del codice
C secondo il protocollo "JNI" ("Java Native Interface"):
il codice JNI comunichera` col Java usando appunto
JNI, e con la DLL esterna usando puntatori, o
quant'altro serva.
Alex