Newsgroup: it.comp.java
Titolo: problema esecuzione "javah"

ciao a tutti,
       sto cercando di utilizzare una libreria DLL  su Win2000 con una
applicazione che sto sviluppando in Java.
attualmente utilizzo la JVM Sun 1.4.0-03 a causa dei ripetuti blocchi sia di
Eclipse 2.0 che di SunOne Studio4-CE  con la JVM 1.4.1 (non so il motivo).
Ho letto sia la documentazione Sun online sulle JNI ma non siesco ad
ottenere un file .h generato dal "javah".
Finche compilo il file java (HelloWorld) tutto funziona correttamente, ma
quando scrivo "javah-jni HelloWorld" mi scrive a video:
                    "Error Class HelloWorld could not be found."
io mi chiedo come mai non trova la classe eppure il class creato ha lo
stesso nome:
l'esempio HelloWorld.java e' il seguente:
class HelloWorld {
    public native void displayHelloWorld();
    static {
        System.loadLibrary("hello");
    }
    public static void main(String[] args) {
        new HelloWorld().displayHelloWorld();
    }
}
io possiedo solo la DLL (gestisce il driver di una scheda Sat PCI) e non
esiste documentazione sulle API che vengono utilizzate.
attraverso un disassemblatore con alcuni miei amici abbiamo estratto molte
info a riguardo,
tra cui i parametri da passare alle funzioni della DLL.
Ora leggendo la doc. JNI sul sito di Sun, mi sono reso conto che e'
necessario caricare da Java una libreria DLL "ponte" in modo da creare una
libreria DLL compatibile con Java.
Sinceramente non pensavo fosse cosi' incasinato interfacciare una DLL con
Java.
Perche ricevo quella segnalazione di errore?
Esiste un modo piu' semplice per interfacciare la libreria????
grazie in anticipo...
ciao.

 Perche ricevo quella segnalazione di errore?
http://space.tin.it/computer/csadun/javafaq.html#d1-15
Vale anche per javah (che ha un'opzione -classpath)
-- 
Life's something u don't get out alive..
ObjectZone - 
http://space.tin.it/computer/csadun

 Esiste un modo piu' semplice per interfacciare la libreria????
Allora, devi sempre creare una DLL ponte. Non deve fare molto, ha solo un
compito assai ripetitivo di convertire i vari parametri (che hanno tipi
quali jint, jobject eccetera) in quelli della funzione nativa e convertire
i dati ritornati. Puoi provare a cercare una libreria che offra un'accesso
più semplice(su ioProgrammo leggevo di una libreria del genere per
Delphi).
Oppure puoi incapsulare la DLL in un ActiveX e poi richiamarlo da Java,
usando la JVM microsoft però(almeno ricordo che si potevano richiamare
classi java come activex; non so se il contrario, ma penso proprio di sì).
Oppure c'è anche Jacob che funziona sulla JVM sun e chiama Com, ma usare
Jacob è una complicazione anziché una semplificazione.
Scusa se non ti dò link, ma Google è tuo amico. Ciao
-- 
Paolo Giarrusso, aka Blaisorblade
Togliere solo REMOVEONLYTHIS per rispondere
Linux Kernel 2.4.19 on an i686
Linux registered user n. 292729
Firma "made in Vim"

BlaisorBlade,
    come un perfetto asino dimenticai le piu' elementari nozioni,
il ClassPath che avevo era impostato senza il percorso della cartella
corrente, e senza il rt.jar
un ultimo appunto, quando ho tentato di compilatre la libreria dll con
VC++6.0  con il supporto JNI,
mi segnalava un errore su "jni.h" e "jni_md.h", ho risolto copiandomi i due
file sul percorso corrente dei miei file Java;
e sostituito nell .h generato <jni.h> in "jni.h", cosi da puntare alla mia
cartella.
grazie.

ok l'ho risolto includendo l'include:
cl -Ic:\j2sdk1.4.0\include -LD HelloWorld.c
finalmente..

 i due file sul percorso corrente dei miei file Java;
Meglio aggiungere %JAVA_HOME/include alle include directories del 
compilatore. Cosi' ti eviti copie di header file per tutt l'hard disk.
Con vc++, lo fai o dall'IDE o c'e' un'opzione a riga di comando.
