PDA

View Full Version : [JAVA] importare librerie .dll in java


grillo_81
10-05-2006, 17:07
ciao ragazzi.

è possibile importare ed usare una libreria di windows tipo... che ne so... ati2evxx.dll (mettiamo che voglia usare qualche funzione specifica della scheda video che ne so! tanto per dirne una...) all'interno di un'applicazione java per poterne usare le funzioni???
ho trovato una direttiva chiamata @dll.import ma è proprietaria di microsoft e funziona solo sotto J/Direct che è una specie di add-on per la microsoft virtual machine o cose del genere...


grazie tanto dell'info...

sottovento
10-05-2006, 17:17
Ciao,
generalmente le funzioni che scrivi in una dll, al fine di essere importate in Java, devono avere una particolare segnatura.
Non so se esistono altre modalita'.
Potresti creare una nuova dll che "wrappa" le funzioni che ti servono: le funzioni della tua dll le chiami da li'.

High Flying
Sottovento

pisto
10-05-2006, 19:59
cerca il plugin jni

PGI-Bis
10-05-2006, 20:14
"il plugin in jni" è un pezzo standard della piattaforma Java SE. L'hai già trovato.

Usi jni per fare quello che segnala sottovento. Supponiamo che tu voglia accedere alla funzione nativa "int bimBumBam()", definita nella dll "Kaboom.dll".

1. Creo un oggetto Java KaboomWrapper (il nome è irrilevante) che offre un metodo nativo che sarà collegato alla funzione bimBumBam di Kaboom.dll.

public class KaboomWrapper {
public native int bimBumBam(); //anche questo nome è arbitrario
}

Un metodo nativo è un metodo il cui corpo è definito in una libreria nativa. Compili KaboomWrapper con javac e poi compili KaboomWrapper.class con javah. Il compilatore javah genera un file di intestazione C/C++. Quel file contiene la dichiarazione della controparte nativa del metodo java nativo int bimBumBam (una cosa tipo jniexport jint eccetera_bimBumBam(JObject, JEnv trallallà)).

Dai una definizione C/C++ di quella dichiarazione. In questa definizione invochi il metodo bimBumBam dichiarato e definito nella libreria Kaboom.dll (che provvederai a caricare o collegare o fare quello che di solito si fa in C). A questo punto compili la definizione C della controparte nativa e generi una dll, diciamo KaboomWrapper.dll. E il gioco è fatto.

Avendo cura di fornire a java la libreria KaboomWrapper.dll, l'uso dell'oggetto KaboomWrapper richiederà il caricamento iniziale della libreria KaboomWrapper.dll

System.loadLibrary("KaboomWrapper");

dopodichè KaboomWrapper sarà un oggetto tale e quale agli altri:

KaboomWrapper kw = new KaboomWrapper();
int valore = kw.bimBumBam();

Dietro le quinte, il valore di "risultato" sarà ottenuto invocando attraverso la libreria involucro KaboomWrapper.dll la funzione bimBumBam() definita in Kaboom.dll.

E' molto più facile a farsi che a dirsi :D.